
谷歌沒有幫助我。
#!/bin/sh
j1=`expr "$1"`
j2=`expr "$2"`
while [ $j1 -le $j2 ]; do
date=$(ncal -e $j1)
month=$($date | cut -f1 -d' ')
if [ $month=="April" ]; then
echo $date
fi
j1=`expr $j1 + 1`
done
我只想列印四月的復活節日期(在我作為參數傳遞的兩年之間的範圍內)。但不知何故我得到了輸出:
…
April 5 2015
./script.sh: 8: March: not found
March 27 2016
./script.sh: 8: April: not found
April 16 2017
「月份:未找到」是什麼意思?儘管我只要求四月,但為什麼它會印三月?
我嘗試了各種方法,但總是出現一些錯誤。
我還需要添加一個條件,即只列印 4 月 20 日之後的日期,但我什至無法處理這個問題。
答案1
在線上
month=$($date | cut -f1 -d' ')
$date
您以命令的形式執行 in 中的任何內容,並將其輸出通過管道傳輸到cut
.
我想你想要
month=$( printf '%s\n' "$date" | cut -f 1 -d ' ' )
這裡。
另外,不要$(...)
在同一個腳本中混合使用反引號,這會造成混亂。就用$(...)
代替吧。
比較字串是透過以下方式完成的=
:
if [ "$month" = "April" ]; then
請務必用雙引號引用您的變數。看忘記在 bash/POSIX shell 中引用變數的安全隱患
可以使用 完成整數算術$(( expression ))
。 expr
已經過時了。
j1=$(( "$1" ))
j2=$(( "$2" ))
...
j1=$(( j1 + 1 ))