Linux
在 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 ]
看: