Níže uvedený skript používám k přesunu o dva dny zpět, když skript běží na začátku dvou dnů v roce, a také ke kontrole prvního a druhého dne každého měsíce a posunutí o dva dny zpět.
if [$month="01"] && [$day="01"];
then
date="$last_month/$yes_day/$last_year"
fulldate="$last_month/$yes_day/$last_year"
else
if [$month="01"] && [$day="02"];
then
date="$last_month/$yes_day/$last_year"
fulldate="$last_month/$yes_day/$last_year"
else
if [ $day = "01" ];
then
date="$last_month/$yes_day/$year"
fulldate="$year$last_month$yes_day"
else
if [ $day = "02" ];
then
date="$last_month/$yes_day/$year"
fulldate="$year$last_month$yes_day"
else
date="$month/$yes_day/$year"
fulldate="$year$month$yes_day"
fi
fi
fi
fi
Ale špatně se mi zobrazuje níže uvedená chybová zpráva
Etime_script.sh: line 19: [06=01]: command not found
Etime_script.sh: line 24: [06=01]: command not found
Přijatá odpověď:
[ není ani metaznak, ani ovládací operátor (dokonce ani vyhrazené slovo; totéž platí pro ] ), proto potřebuje kolem sebe mezery. Jinak shell „vidí“ příkaz [01=01] místo příkazu [ se samostatnými parametry 01 , = , 01 a ] . Každý operátor a operand musí být samostatný argument pro [ příkaz, takže mezery jsou nutné i kolem operátorů.
if [ "$month" = "01" ]
[$month="01"] je vzor zástupného znaku odpovídající kterémukoli ze znaků v $month nebo "01 . Pokud se s ničím neshoduje, je ponechán.
Pokud je za uzavírací závorkou středník, nepotřebujete před ním mezeru, protože středník je vždy součástí samostatného tokenu.
if [ "$month" = "01" ]; then
Totéž platí pro syntaxi bash (a ksh a zsh) se dvěma závorkami.
Více než jedna podmínka
Podmínky lze kombinovat dvěma způsoby:
-
v rámci
[ -
se samostatným
[příkazy kombinované s&&nebo||
Seskupování pomocí hranatých závorek je pravděpodobně jednodušší v [ .
if [ "$month" = "01" -a "$day" = "01" ] # -a for and, -o for or
if [ "$month" = "01" ] && [ "$day" = "01" ]
Prvnímu je třeba se vyhnout, protože je nespolehlivý (zkuste například pomocí month='!' ). Problémům s podivným proměnným obsahem se lze vyhnout tím, že nejprve použijete bezpečný řetězec (pokud nějaký existuje); nebo pomocí [[ /]] místo [ /] :
if [ "01" = "$month" -a "01" = "$day" ]