2011-08-03 59 views
1

我想查看是否有新行匹配。原因是我的腳本要求用戶的名字。如果他們按回車鍵,則使用默認名稱。匹配新行 - Unix Shell

問題是我似乎無法檢查他們是否按下輸入,或者使用了他們自己的名字。我在網上搜索了很多,並且找不到有效的答案。以下是我試圖實現的內容:

if [ `expr match "$temp1" "\n"` != 0 ] 

對此很新穎。謝謝!

+0

提供的所有答案的關鍵在於shell將剝離換行符。如果用戶只輸入任何字符而不輸入任何字符,則「temp1」變量將爲空。 –

回答

1

嘗試是這樣的:

#!/bin/sh 
/bin/echo -n "Who? " 
read name 
if [ "x$name" != "x" ] 
then 
    echo "Hi $name" 
else 
    echo "Hi no-name" 
fi 
+0

嘿,這似乎工作!但我不明白爲什麼大聲笑......做的!=只是比較第一個字或這樣的東西?我的意思是,x後沒有新的行嗎?謝謝!! – seyelent

3

你不需要檢查他們是否按下輸入。只要檢查字符串的長度。例如:

if [ -z $input ] 
then 
    echo "No name was input. Setting default name" 
    name=JOE 
fi 

或者,也可以使用以下的bash語法一個變量設置爲一個默認值:

name=${input:-JOE} 

這意味着如果該變量input沒有設置,name將被設置爲默認的「JOE」。

1

你可以使用這個'讀」的bash內置:

echo 'what is your name?'; read name; echo Hi ${name:='John'} 

將分配名爲‘約翰’就好像用戶的默認名稱無需輸入任何名稱即可進入。

我忘了補充說,如果沒有設置$ {name:='John'},那麼幫助的功能就是默認的shell變量賦值。

+0

上面的回覆似乎有效,我明白它好一點。如果它不起作用,我會轉向這個。非常感謝!! – seyelent