У меня есть одна программа, которая начинается с этой строки. Что это значит? У меня проблемы с поиском в Google из-за знака доллара.
Как так получилось, что $1 без параметров? И что здесь означает -d?
if [ -d $1 ]; then
И ставится ли точка с запятой, даже если условие if даже не начинается? Я думал, что точка с запятой ставится только в конце оператора или в конце условия, как
if () { };
решение1
Точка с запятой обязательна, поскольку без указания того, где заканчивается этот контекст (через точку с запятой, новую строку и т. д.), if
невозможно узнать, где заканчивается условие и начинается условный блок. Сравните:
$ if echo then foo then; then :; fi
then foo then
$ if echo then; then :; fi
then
-d
это тест для проверки, является ли следующий аргумент каталогом. Из help test
(потому что test
эквивалентно [
):
-d FILE True if file is a directory.
Например:
$ mkdir foo
$ if [ -d foo ]; then
> echo foo is a dir
> fi
foo is a dir
$1
это первый аргумент, переданный вашей программе. Например:
$ cat > script << 'EOF'
> #!/bin/sh
> echo "$1"
> EOF
$ chmod +x script
$ ./script foo
foo
Кстати, $1
здесь следует использовать кавычки, иначе они могут разрастись до нескольких аргументов, что приведет к синтаксической ошибке [
:
$ dir="foo bar"
$ [ -d $dir ]
sh: 2: [: foo: unexpected operator
$ [ -d "$dir" ]
$