Saya menggunakan skrip di bawah ini untuk mundur dua hari ketika skrip berjalan mulai dua hari dalam setahun dan juga memeriksa hari pertama dan kedua setiap bulan dan mundur dua hari.
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
Tapi sayangnya saya mendapatkan pesan kesalahan di bawah ini
Etime_script.sh: line 19: [06=01]: command not found
Etime_script.sh: line 24: [06=01]: command not found
Jawaban yang Diterima:
[
bukan metakarakter atau operator kontrol (bahkan bukan kata yang dicadangkan; sama untuk ]
) sehingga perlu spasi putih di sekitarnya. Jika tidak, shell “melihat” perintah [01=01]
alih-alih perintah [
dengan parameter terpisah 01
, =
, 01
, dan ]
. Setiap operator dan operan harus menjadi argumen terpisah untuk [
perintah, jadi spasi juga diperlukan di sekitar operator.
if [ "$month" = "01" ]
[$month="01"]
adalah pola wildcard yang cocok dengan salah satu karakter di $month
atau "01
. Jika tidak cocok, dibiarkan saja.
Jika ada titik koma setelah tanda kurung tutup, Anda tidak perlu spasi di depannya, karena titik koma selalu merupakan bagian dari token yang terpisah.
if [ "$month" = "01" ]; then
Hal yang sama berlaku untuk sintaks braket ganda bash (dan ksh dan zsh).
Lebih dari satu syarat
Ada dua cara untuk menggabungkan kondisi:
-
dalam
[
-
dengan
[
yang terpisah perintah yang digabungkan dengan&&
atau||
Pengelompokan dengan tanda kurung mungkin lebih mudah dalam [
.
if [ "$month" = "01" -a "$day" = "01" ] # -a for and, -o for or
if [ "$month" = "01" ] && [ "$day" = "01" ]
Yang pertama harus dihindari karena tidak dapat diandalkan (coba misalnya dengan month='!'
). Masalah dengan konten variabel aneh dapat dihindari dengan menggunakan string aman (jika ada) terlebih dahulu; atau dengan menggunakan [[
/]]
bukannya [
/]
:
if [ "01" = "$month" -a "01" = "$day" ]