Я пытаюсь проверить, использует ли пользователь несколько аргументов в командной строке с использованием аргументов case и if/else. Что не так, я продолжаю получать случай по умолчанию вместо одной и той же команды, но с еще двумя аргументами. Например, один из моих условий:Bash: Else не работает в if/else в заявлении case
del)
if [ -z "$2" ] || [ -z "$3" ]
then
echo "Usage: removes a file"
else
echo "using Bash command: rm $2 $3"
rm $2 $3
echo done
fi
печатает первое условие, но если я типа, скажем, дель ааа ГЭБ, я получаю случай по умолчанию, а именно:
echo "ERROR: Unrecognized command"
Я m также используя это, чтобы прочитать ввод пользователя, если это помогает.
read -p "wcl> " -r wcl $2 $3
Я действительно не знаю, если есть лучший способ решить эту проблему, не списывая весь мой код и начать с нуля. Это полный код:
#!/bin/bash
#use read command
echo Welcome to the Windows Command Line simulator!
echo Enter your commands below
while true
do
read -p "wcl> " -r wcl $2 $3
case $wcl in
dir)
echo "using Bash command: ls $2 $3"
ls
continue
;;
copy)
FILE="$2"
if [ "$#" -ne 3 ]
then
echo "Usage: copy sourcefile destinationfile"
else
echo "using Bash command: cp $2 $3"
if [ -f "$FILE" ]
then
cp $2 $3
else
echo "cannot stat $FILE: No such file or directory">&2
fi
echo done
fi
continue
;;
del)
if [ -z "$2" ] || [ -z "$3" ]
then
echo "Usage: removes a file"
else
echo "using Bash command: rm $2 $3"
rm $2 $3
echo done
fi
continue
;;
move)
if [ -z "$2" ] || [ -z "$3" ]
then
echo "Usage: moves a file to another file name and location"
else
echo "using Bash command: mv $2 $3"
mv $2 $3
echo done
fi
continue
;;
rename)
if [ -z "$2" ] || [ -z "$3" ]
then
echo "Usage: renames a file"
else
echo "using Bash command: mv $2 $3"
mv $2 $3
echo done
fi
continue
;;
ipconfig)
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
continue
;;
exit)
echo "Goodbye"
exit 1
;;
^c)
echo "Goodbye"
exit 1
;;
*)
echo "ERROR: Unrecognized command"
continue
esac
done
Лучший способ проверить количество аргументов командной строки - проверить '$ #', например. 'if (($ # <2))'. – cdarke
Вам нужно показать остальную часть вашего кода, в частности часть 'case .. in'. – SiKing