2011-08-03 6 views
1

新しい行がマッチしているかどうか確認しようとしています。なぜなら、私のスクリプトはユーザーの名前を尋ねるからです。 Enterキーを押すと、デフォルトの名前が使用されます。新しい行のマッチング - Unixシェル

問題は私が入力を押したのか、それとも自分の名前を使用したのかを確認できないということです。私はネット上で多くを検索しており、うまく答えを見つけることができません。ここに私が実装しようとしているものがあります:

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

非常にこれに新しいです。ありがとう!

+0

すべての回答の鍵は、シェルが改行を取り除くことです。ユーザーが文字を入力せずにEnterキーを押すと、 "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

ねえ、これはうまくいくようです!しかし、私はなぜ笑を得ることはありません...!=ただ最初の言葉を比較するか、またはsoemthing?つまり、「x」はxの後ろに新しい行を持ちませんか?ありがとう!! – seyelent

3

入力が完了したかどうかを確認する必要はありません。文字列の長さを確認するだけです。例:

name=${input:-JOE} 

これは、変数inputが設定されていない場合、nameに設定されることを意味します。また

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

は、デフォルト値に変数を設定するには、次のbashの構文を使用することができますデフォルトは「JOE」です。

1
あなたはこのため `読み」、bashの組み込みを使用することができます

:ユーザーであれば、デフォルト名として名『ジョン』を割り当てます

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

名前を入力せずにenterキーを押す。

$ {name:= 'John'}が設定されていないと、デフォルトのシェル変数値の割り当てが役立つという機能を追加することを忘れました。

+0

上記の反応はうまくいくように見えますが、少し良くなっています。それがうまくいかなければ、私はこのものに移ります。本当にありがとう!! – seyelent

関連する問題