【发布时间】:2017-09-06 23:13:00
【问题描述】:
我正在尝试将一串选项提供给 bash 脚本并将它们分配给带有大小写的变量。我相信案例是有条件的。有没有办法让 case 循环遍历选项并分配变量?我正在使用一些一次并循环使用其他一些。在 case 语句之后打印循环不起作用。
示例:
运行脚本: ./ping_ds_replication_setup --bind_dn nate --bind_password 密码 --slave_ds_servers server1 server2 server-name.troweprice.io --master_ds_server server3 --admin_uid nate --admin_password 密码
当前输出: ping_bind_dn:自然 绑定密码:密码 辅助服务器:server1 辅助服务器:server2 辅助服务器:server-name.troweprice.io 主 ds 服务器:server3 admin_uid:自然 admin_password: 密码
脚本:
while [ -n 1 ]; do
case "$1" in
--bind_dn)
ping_bind_dn=$2
printf "ping_bind_dn: $ping_bind_dn\n"
shift
;;
--bind_password)
bind_password=$2
printf "bind password: $bind_password\n"
shift
;;
--admin_uid)
admin_uid=$2
printf "admin_uid: $admin_uid\n"
shift
;;
--admin_password)
admin_password=$2
printf "admin_password: $admin_password\n"
shift
;;
--master_ds_server)
master_ds_server=$2
printf "master ds server: $master_ds_server\n"
shift
;;
--slave_ds_servers)
slave_raw_input=( $@ )
slave_switch_removed=${slave_raw_input[@]:1}
regex2=$(grep -Po '.*?(?=--)' <<< ${slave_switch_removed[@]})
secondary_ds_server=($(echo "${regex2}"|head -n 1))
for secondary_server in "${secondary_ds_server[@]}"; do
printf "secondary servers: $secondary_server \n"
done
shift
esac
shift
done
for secondary_server in "${secondary_ds_server[@]}"; do
printf "secondary servers outside case: $secondary_server \n"
done
【问题讨论】:
-
请参阅此处了解循环解决方案:stackoverflow.com/a/7948533/402322
-
我能够通过测试空格来跳出循环,因为所有选项都有参数。使用 while [[ $1 != "" ]];做