我正在编写一个 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
作为命令执行?有人能帮我吗?
答案1
在 bash 中,你得到价值变量$directory
。所有细节在手册中。
除非你明确知道什么时候该省略引号,否则你应该总是引用"$variable"
扩展。
另外,[...]
不是语法,[
实际上是命令(命令的别名test
)。命令必须与其参数用空格分隔。
if [ "$environment" = prod ]
看: