我很迷惑我從腳本中獲得的錯誤,我試圖運行以暫停我的機器。我試圖在elif語句中使用正則表達式在特定時間段後暫停我的機器。bash在if語句中的正則表達式
#!/bin/bash
echo "When would you like to suspend the machine?"
read "sustime"
if [ "$sustime" = "now" ]
then
sudo pm-suspend
elif [[ "$sustime" =~ [0-9]*[smhd] ]]
then
time=`expr "$sustime" : '\([0-9]+)\)'`
ttype=`expr "$sustime" : '.*\([smhd]\)'`
sudo sleep $time$ttype ; sudo pm-suspend
else
echo "Please enter either [now] or [#s|m|h|d]"
fi
如果我輸入5S的代碼不會對elif
線工作,例如,該腳本的輸出是:
$ sh dbussuspend.sh
When would you like to suspend the machine?
5s
dbussuspend.sh: 10: dbussuspend.sh: [[: not found
Please enter either [now] or [#s|m|h|d]
但是,應該閱讀,我已經進入了字符串5s
運行elif
下的代碼塊。我實際上已經嘗試使用任何正則表達式代替[0-9]*[smhd]
,所有錯誤都是一樣的。
旁註:你可能需要'[0-9] + [smhd]'否則'h'將是一個可接受的輸入。 – Laurel
你不需要'expr';您可以在原始正則表達式中使用捕獲組,然後訪問數組「BASH_REMATCH」中的捕獲值。 – chepner