Прошло некоторое время с тех пор, как я написал сценарий в bash, поэтому я сделал небольшой сценарий, чтобы проверить все. Это мой сценарий (цитируемый текст какой-то голландский, не имеет большого значения):
#isingelogd
if[$#=0]
then
echo "Geef user-id's op!" 1>$2 ; exit 1
fi
for uid in $*
do
if who|grep $uid >dev/null
then
echo $uid is ingelogd
else
echo $uid is niet ingelogd
fi
done
Если я пытаюсь запустить его, он говорит мне следующее:
bash-3.2$ ./isingelogd
./isingelogd
./isingelogd: line 3: if[0=0]: command not found
./isingelogd: line 4: syntax error near unexpected token `then'
./isingelogd: line 4: `then'
Если я проверю свою версию с помощью bash -v, я использую 3.2, которая, как я думал, поддерживает квадратные скобки.
Может у кого была похожая проблема и нашел решение?
if [ $# -eq 0 ]
.=
— это сравнение строк, как описано здесь - person   schedule 07.08.2013[
на самом деле является командой оболочки. Как и любой команде, ей нужны пробелы после нее, чтобы отделить ее от аргументов (аналогично,if
требует пробела после нее).[
работает по-разному в зависимости от того, сколько аргументов он получает (его последний аргумент должен быть]
) - person glenn jackman   schedule 07.08.2013