我想查看是否有新行匹配。原因是我的腳本要求用戶的名字。如果他們按回車鍵,則使用默認名稱。匹配新行 - Unix Shell
問題是我似乎無法檢查他們是否按下輸入,或者使用了他們自己的名字。我在網上搜索了很多,並且找不到有效的答案。以下是我試圖實現的內容:
if [ `expr match "$temp1" "\n"` != 0 ]
對此很新穎。謝謝!
我想查看是否有新行匹配。原因是我的腳本要求用戶的名字。如果他們按回車鍵,則使用默認名稱。匹配新行 - Unix Shell
問題是我似乎無法檢查他們是否按下輸入,或者使用了他們自己的名字。我在網上搜索了很多,並且找不到有效的答案。以下是我試圖實現的內容:
if [ `expr match "$temp1" "\n"` != 0 ]
對此很新穎。謝謝!
嘗試是這樣的:
#!/bin/sh
/bin/echo -n "Who? "
read name
if [ "x$name" != "x" ]
then
echo "Hi $name"
else
echo "Hi no-name"
fi
嘿,這似乎工作!但我不明白爲什麼大聲笑......做的!=只是比較第一個字或這樣的東西?我的意思是,x後沒有新的行嗎?謝謝!! – seyelent
你不需要檢查他們是否按下輸入。只要檢查字符串的長度。例如:
if [ -z $input ]
then
echo "No name was input. Setting default name"
name=JOE
fi
或者,也可以使用以下的bash語法一個變量設置爲一個默認值:
name=${input:-JOE}
這意味着如果該變量input
沒有設置,name
將被設置爲默認的「JOE」。
你可以使用這個'讀」的bash內置:
echo 'what is your name?'; read name; echo Hi ${name:='John'}
將分配名爲‘約翰’就好像用戶的默認名稱無需輸入任何名稱即可進入。
我忘了補充說,如果沒有設置$ {name:='John'},那麼幫助的功能就是默認的shell變量賦值。
上面的回覆似乎有效,我明白它好一點。如果它不起作用,我會轉向這個。非常感謝!! – seyelent
提供的所有答案的關鍵在於shell將剝離換行符。如果用戶只輸入任何字符而不輸入任何字符,則「temp1」變量將爲空。 –