Ваш сценарий оболочки (как показано) работает как в оболочке Korn, так и в Bash.Некоторые мысли:
- Вам может понадобиться пробел после шебанга (#! / Bin / bash, а не #! / Bin / bash).Тем не менее, Деннис Ритчи первоначально указал, что пробел необязательно .Кроме того, это не ошибка, которую вы получаете с оболочкой Bourne (вместо этого вы получаете
syntax error: '(' unexpected
). - Вы в системе Windows?Просто удар в темноте.Это не похоже на ошибку Windows.
- Это система Solaris или HP / UX?Возможно, они не работают под настоящими версиями Bash или более старой версии.Однако даже самая старая версия Bash распознает конструкцию
for ((x;y;z))
.
Попробуйте:
#! /bin/bash
set -vx
echo "Random = $RANDOM" #Test for bash/Kornshell. Will be blank in other shells
echo \$BASH_VERSINFO[0] = ${BASH_VERSINFO[0]} #Should only work in BASH
echo \$BASH_VERSINFO[1] = ${BASH_VERSINFO[1]}
echo \$BASH_VERSINFO[2] = ${BASH_VERSINFO[2]}
echo \$BASH_VERSINFO[3] = ${BASH_VERSINFO[3]}
echo \$BASH_VERSINFO[4] = ${BASH_VERSINFO[4]}
echo \$BASH_VERSINFO[5] = ${BASH_VERSINFO[5]}
for ((c=0, c<=5, c++))
do
echo "Welcome $c times"
done
-
set -xv
отобразит все строки такими, какие они есть - В
$RANDOM
должно отображаться значение, если это BASH или Kornshell (ваш цикл for будет работать в любом из них). {$BASH_VERINFO[x]}
следует устанавливать только в том случае, если этоэто действительно BASH.Они даже не устанавливаются, даже если вы запускаете оболочку Korn после того, как вы находитесь в BASH (в отличие от $ SHELL, который по-прежнему будет содержать bash
).
Если цикл for все еще вызывает проблемы, простоудали это.Где-то в этом сценарии мы узнаем, действительно ли вы запускаете оболочку bash или нет.