以下のように "teleport.sh" というシェルスクリプトがあります。
if [ $1="1" ];
then
shift
mv "$@" ~/lab/Sun
elif [ $1="2" ];
then
shift
mv "$@" ~/lab/Moon
elif [ $1="3" ];
then
shift
mv "$@" ~/lab/Earth
fi
私が実行したとき:
sh teleport.sh 2 testfile
これはディレクトリtestfile
に移動されます~/lab/Sun
が、スクリプトに 1 または "1" を渡さないため混乱します。
どうなりますか?
ベストアンサー1
スペースを使用すると問題を解決できます。
if [ "$1" = 1 ];
then
shift
mv "$@" ~/lab/Sun
elif [ "$1" = 2 ];
then
shift
mv "$@" ~/lab/Moon
elif [ "$1" = 3 ];
then
shift
mv "$@" ~/lab/Earth
fi
これはもっときれいですが:
#!/bin/bash
action=$1
shift
files=("$@")
case $action in
1) mv -- "${files[@]}" ~/lab/Sun ;;
2) mv -- "${files[@]}" ~/lab/Moon ;;
3) mv -- "${files[@]}" ~/lab/Earth ;;
esac