2016-05-04 10 views
1

私はLinuxコースを受講しており、私たちはbashスクリプトを扱っています。次のスクリプトは、echo文を文字列の値で表示するが、そうではない。

#/bin/bash 

echo "Enter the first string" 
read str1 
echo "Enter the second string" 
read str2 
echo $str1 
echo $str2 
myLen1=${#str1} 
myLen2=${#str2} 

if [ ! -z $str1 ]; then 
    echo Length of the first string is: $myLen1 
else 
    echo Please enter a value for ${str1} with more than 0 characters 
fi 

if [ ! -z $str2 ]; then 
    echo Length of the second string is: $myLen2 
else 
    echo Please enter a value for $str2 with more than 0 characters 
fi 

私は成功せず、次のことを試してみました:

echo Please enter a value for ${str2} with more than 0 characters 

echo Please enter a value for "$str2" with more than 0 characters 

echo "Please enter a value for $str2 with more than 0 characters" 

echo "Please enter a value for ${str2} with more than 0 characters" 

任意のアイデア?

+1

文字列の文字数は0文字です。正確に何を印刷するのが見たいと思っていますか? –

+0

@EtanReisnerそれは理にかなっています。明らかに、何も印刷されません。謝罪いたします。代わりに、私はちょうど 'echo" Entry 1:... "'と 'echo "Entry 2:..."のように追加しました。 " – Debug255

+1

シェルデバッグ/トレース機能を有効にするために' set -vx'を追加しました。次に、コードが実行される前に各行のコードが表示され、 '+'が前に置かれた行と、すべての変数の置換がその場で確認できます。次に、コードで何が起こっているのかを理解することができます。ところで、 'set -v'部分は実際にはコードの"ブロック "を処理するので、whileループやforループ、そして実際に実行される' + '行だけを出力します。実際に実行されている行が混乱する可能性があります。 'export PS3 = '$ LINENO>''を実行すると、実行されているコードの行番号が表示されます。がんばろう。 – shellter

答えて

2

あなたはbashを扱うLinuxコースにいると言います。

テストとデバッグ
があなたのbashスクリプトbash -x ./script.shを起動するか、またはデバッグ出力を見るためにあなたのスクリプトset -xに追加 :そのように、私は一般的にあなたを助けることを願っていますいくつかの一般的な見解を共有します。 #!/bin/bash(あなたがが欠落している!):構文
@drewyupdrewが同様に指摘したように

は、次のようなスクリプトの先頭に使用しているシェルを指定する必要があります。

[ ! -z $str2 ]-z比較演算子を使用しています。 -z演算子は、文字列がヌルか、長さがゼロかを比較します。あなたは!との比較を否定しています。

この同じ操作を実行するためのより簡潔な方法は、比較演算子-nを使用することです。 -nオペレータは、文字列がnullでないかどうかをテストします。

また、テストブラケットの変数(単一の[ ])を引用符で囲む必要があります。 ! -zの引用符で囲まれていない文字列を使用するか、引用符で囲まれていない文字列だけを使っても問題はありませんが、これは安全ではありません。

ので、アカウントに上記のノートを取って、いくつかの他の編集と一緒に、私は次のように思い付く:

#!/bin/bash 

echo "Enter the first string" 
read str1 
echo "Enter the second string" 
read str2 

echo "This is the first string: ${str1}" 
echo "This is the second string: ${str2}" 

myLen1=${#str1} 
myLen2=${#str2} 

if [ -n "$str1" ]; then 
    echo "Length of the first string is: ${myLen1}" 
else 
    echo "Please enter a value for the first string with more than 0 characters" 
fi 

if [ -n "$str2" ]; then 
    echo "Length of the second string is: ${myLen2}" 
else 
    echo "Please enter a value for the second string with more than 0 characters" 
fi 

はその助けをしていますか?

+0

Mark Mitchelはい、助けてくれました。私が取っている講座はedx.orgにあり、研究室への結果や答えは一括弧と '! -z $ str1'を実行します。スクリプトを 'bash script.sh'として実行していたので、私は'#/ bin/bash 'の問題に気付かなかったと思います。はるかにうまくいったので、あなたの洞察力に感謝します。 – Debug255

0

入力を印刷しようとしているスクリプトの部分では、入力に文字が含まれていないと主張しました。変数が展開されると、空の文字列に展開され、内容は表示されません。

関連する問題