Назад | Перейти на главную страницу

Команда не работает во время выполнения скрипта в bash

Я работаю над сценарием bash для автоматизации некоторых общих задач, но у меня возникли проблемы, и мне нужна помощь. Я говорю о сценарии:

#!/usr/bin/env bash

PS3='Please enter your choice: '
options=("Prepare environment" "Create new group" "Add users to group" "Change directory ownership" "Change directory permissions" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Prepare environment")
            read -e -p "Enter the work directory: " -i "/var/www/html/" directory
            cd directory

            echo "Updating BOWER..."
            npm -g update bower

            echo "Updating COMPOSER..."
            composer self-update

            read -e -p "Enter the environment: " -i "prod" environment

            if [environment eq prod]
            then
                git fetch --all
                git reset --hard origin/master
                git pull

                composer install --no-dev --optimize-autoloader
                php app/console cache:clear --env=prod --no-debug
            else
                read -e -p "Enter the environment type: " -i "local" envtype

                if [envtype eq local]
                then
                    composer update
                    php app/console cache:clear --env=dev
                    php app/console cache:warmup
                else 
                    git fetch --all
                    git reset --hard origin/master
                    git pull

                    composer update
                    php app/console cache:clear --env=dev
                    php app/console cache:warmup
                fi  
            fi          

            echo "Cleaning the house and updating libraries..." 
            bower cache clean --allow-root
            bower prune --allow-root
            bower install --allow-root
            bower update --allow-root
        ;;
        "Create new group")
            read -e -p "Enter the group name: " -i "www-pub" groupname
            groupadd groupname
            echo "You have added a new group: " groupname
            ;;
        "Add users to group")
            read -e -p "Enter the group name: " -i "www-pub" groupname
            loop=true          # "true" is a command

            while true; do
                read -p "enter username: " username
                [[ -z $username ]] && break

                usermod -a -G groupname username # add user to group
                echo "You have added: " username " to group: " groupname
            done        
            ;;
        "Change directory ownership")
            read -e -p "Enter the group name: " -i "www-pub" "Enter the directory: " -i "/var/www/html" groupname directory
            chown -R root:groupname directory
            echo "You have changed the ownership for: " directory " to root:" groupname
            ;;
        "Change directory permissions")
            read -e -p "Enter the directory: " -i "/var/www/html" "Enter the directtory permissions (type -d) : " -i "2775" "Enter the directtory files (type -f) : " -i "0664"  directory folder files
            echo "Setting permissions " folder " to " directory
            find directory -type d -print0 | xargs -0 chmod permissions 
            echo "Setting permissions " files " to " directory " files"
            find directory -type f -print0 | xargs -0 chmod files 
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

Каждый раз, когда я запускал скрипт, я получал такой результат:

root@test-webserver:/var/www/sis-php-source# /home/script.sh
1) Prepare environment           4) Change directory ownership
2) Create new group              5) Change directory permissions
3) Add users to group            6) Quit
Please enter your choice: 1
Enter the work directory: /var/www/sis-php-source/
/home/script.sh: line 10: cd: directory: No such file or directory
Updating BOWER...
Updating COMPOSER...
You are already using composer version 07c644ac229a21df80180598d8bb9aaba232eecb.
Enter the environment: prod
/home/script.sh: line 20: [environment: command not found
Enter the environment type: local

Зачем cd команда не работает? Зачем environment сценарий пытается выполнить environment как команда, если это входная переменная? Может ли кто-нибудь мне помочь?

В bash вы получаете стоимость переменной с $directory. Все подробности в руководстве.

Если вы не знаете, когда следует не использовать кавычки, вам следует всегда цитировать "$variable" расширение.

Также, [...] это не синтаксис, [ на самом деле команда (псевдоним для test команда). Команды должны отделяться от аргументов пробелами.

if [ "$environment" = prod ]

Видеть: