Если вы не пишете скрипт для переносимости в исходную оболочку Bourne или другие, которые не поддерживают эту функцию, в Bash и ksh вы должны использовать форму [[
теста для строк и файлов.
Уменьшается необходимость в цитировании и экранировании, дополнительные условия, такие как сопоставление с образцом и регулярным выражением, а также возможность использовать &&
и ||
вместо -a
и -o
.
if [[ $var == $var1 ]]
Кроме того, «NULL» не является специальным значением в Bash и ksh, и поэтому ваш тест всегда будет успешным, поскольку $d
проверяется с использованием буквенной строки «NULL».
if [[ $d != "" ]]
или
if [[ $d ]]
Для числовых значений (не считая начальных нулей, если вы не используете восьмеричное), вы можете использовать числовые выражения. Вы можете опустить знак доллара для переменных в этом контексте.
numval=41
if ((++numval >= 42)) # increment then test
then
echo "don't panic"
fi
Нет необходимости использовать echo
и cut
для подстрок. В Bash и Ksh вы можете сделать:
var=${line:3:23}
Примечание: cut
использует позиции символов для начала и конца диапазона, в то время как эта конструкция оболочки использует начальную позицию и количество символов, поэтому вам необходимо соответствующим образом скорректировать числа.
И это хорошая идея отказаться от использования обратных галочек . Вместо этого используйте $()
. Это может быть вложенным, а цитирование и экранирование уменьшены или упрощены.