Я изучаю баш.
Я хотел бы сделать простой скрипт, который без аргументов показывает какое-то сообщение. И когда я даю числа в качестве аргумента, в зависимости от значения, он делает то или иное.
Я также хотел бы узнать предложения лучших онлайн-руководств для начинающих по bash
Спасибо
> /dev/null
и / или2> /dev/null
после этого отправить его стандартный вывод и / или стандартные потоки ошибок в забвение.exit 1
). Существуют и другие соглашения о кодах возврата / выхода, которые вы можете быстро найти в Интернете, но важным моментом является то, что он не должен быть равен 0, что означает успех.Если вы заинтересованы в освобождении только в том случае, если конкретный аргумент отсутствует, подстановка параметров отлично подходит:
источник
пример
Результат
подробности
-z - унарный оператор для длины строки, равной нулю.
$*
это все аргументы. Кавычки предназначены для безопасности и инкапсулируют несколько аргументов, если они есть.Используйте
man bash
и найдите ( клавиша / ) "унарный", чтобы найти другие подобные операторы.источник
-z
чем-то странномСтарый, но теперь у меня есть причина переработать ответ из-за некоторой предыдущей путаницы:
Это будет эхо «Что-то», если нет позиционного аргумента $ 1. Однако это не подтверждает, что $ 1 содержит конкретную информацию.
источник
$#
явно является целым числом аргументов; либо это будет «0», и вы будете выводить эхо «что-то», даже если нет аргументов, либо это будет некоторое положительное число, и вы отобразите «что-то» правильно. Но сама проверка никогда ничего не сделает, вне зависимости от того, какой ввод или его нет - он всегда будет сообщать, что$#
содержит значение. Так что это совершенно неправильно и никогда не будет работать так, как заявлено.echo $#
в качестве содержимого скрипта /tmp/test.sh, затем запустите его в / bin / bash, а также в / bin / sh (или / bin / dash и в любых других доступных вам реализациях оболочки./tmp/test.sh
Отобразится «0» до консоль, как и будет/bin/dash /tmp/test.sh
. С другой стороны,/tmp/test.sh foo
будет/tmp/test.sh first second
man bash
с разделом «Специальные параметры», «Оболочка обрабатывает несколько параметров особым образом. На эти параметры можно только ссылаться; присвоение им недопустимо.» И «# Расширяется до количества позиционных параметров в десятичной системе счисления». Это также предусмотрено POSIX, как описано в pubs.opengroup.org/onlinepubs/9699919799/utilities/…