if/then パラメーターlinux

if/then パラメーターlinux

また詰まっています。この場合、コマンドラインにファイル名を入力するときにテキスト変換を実行するために先週のタスクを実行しようとします。先週のスクリプトは、列を削除して並べ替えていくつかの文字を置き換え、いくつかのスペースを削除しました。今週の課題には、if / thenパラメーターを含めるようにスクリプトを変更する必要があります。

これが私が今まで持っているものです:

if [ $# -gt 0 ] 
then
    ./hw9.sh
else
     echo "Please enter a filename"
fi
name=First \Last
echo $name
starting_info=raw_info
date
#Pretend the rest of my original script is here#

したがって、テストして入力するとうまく./hw9.sh raw_infoいきますが、それでもPlease enter a filename元の./hw9.shスクリプトを2回エコーして実行します。Please enter a filenameユーザーがコマンドラインに入力するだけでエコーが発生し./hw9.sh、ユーザーが入力すると元のスクリプトを実行する必要があります。./hw9.sh raw_info

誰でも指示を提供できますか?ありがとうございます!

ベストアンサー1

あなたの説明によると、あなたは呼び出されたスクリプトがあり、hw9.sh再帰実行条件を設定したと思います。

を実行すると、hw9.sh raw_info条件ifはtrue(= 1)で$#スクリプトが実行されます。hw9.shこのネストされた実行では、if条件はfalse($#= 0)なので、スクリプトはプロンプトをエコーし​​、そこから実行を続行します。ネストされた実行が完了すると、制御は親スクリプトに戻り、本文の後ろのスクリプトの残りの部分が実行されますif。したがって、スクリプトは実際には2回実行されます。

再帰を使用する代わりに、このような条件を使用して位置引数なしでケースをキャプチャできます。

if [[ $# -eq 0 ]];
then echo 'A filename is required.'
exit 1
fi

これは、複数の位置パラメータがある場合、またはパラメータが文字列 "raw_info"でない場合を考慮しません。これを追加することも検討できます。

また、最終スクリプトをベストプラクティスと一貫して維持するには、次の点を確認してください。https://www.shellcheck.net/

おすすめ記事