case
ステートメントを含むbashスクリプトがあります。
case "$1" in
bash)
docker exec -it $(docker-compose ps -q web) /bin/bash
;;
Shell)
docker exec -it $(docker-compose ps -q web) python manage.py Shell
;;
test)
docker exec -it $(docker-compose ps -q web) python manage.py test "${@:2}"
;;
esac
test
コマンドで、apps
のデフォルト引数を渡したいのですが、ユーザーがtest
以外の引数をbashスクリプトに渡さなかった場合のみです。
したがって、ユーザーが次のようにスクリプトを実行すると、
./do test
コマンドを実行する必要があります
docker exec -it $(docker-compose ps -q web) python manage.py test apps
ただし、次のようにスクリプトを実行した場合:
./do test billing accounts
コマンドを実行する必要があります
docker exec -it $(docker-compose ps -q web) python manage.py test billing accounts
引数の存在をテストするにはどうすればよいですか後最初の引数?
私はbash変数置換を使用しようとします:
test)
shift
docker exec -it $(docker-compose ps -q web) python manage.py test "${@-apps}"
;;
もう1つの方法は、$*
ではなく$1
をチェックすることです。
case $* in
bash)
...
test)
docker exec -it $(docker-compose ps -q web) python manage.py test apps
;;
test\ *)
docker exec -it $(docker-compose ps -q web) python manage.py test "${@:2}"
;;
このようなものはうまくいくでしょう
if [ -z "$2" ]
then
echo "No argument supplied"
fi
case $1:$# in
(test:1)
docker $(this is bad) python test apps;;
(test:$#)
docker $(still bad) python "$@";;
(bash:$#)
docker ...
esac
set ...
を使用して、必要に応じて引数をリセットできます
case "$1" in
#...
test)
[ $# -lt 2 ] && set test apps
docker exec -it $(docker-compose ps -q web) python manage.py $@
;;
esac
引数にスペースや改行がない場合。
引数を文字列に変換します:"$*"
、それを使用します:
f(){ docker exec -it $(docker-compose ps -q web) "$@"; }
case "$*" in
bash) f /bin/bash ;;
Shell) f python manage.py Shell ;;
test) f python manage.py test apps ;;
test\ ?*) f python manage.py "$@" ;;
esac
関数を使用してコード(変数ではない)を管理し、繰り返しを削除する。