Linux

在 bash 中執行腳本期間命令失敗

  • February 7, 2015

我正在編寫一個用於自動化一些常見任務的 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 ]

看:

引用自:https://serverfault.com/questions/665854