1

「ファイルが入力されていません」と出力したい。

ユーザーが Unix スクリプトを呼び出した後に何も入力しないと、そのエラー メッセージが表示されます。

for var in "$@"
do

file=$var

if [ $# -eq 0 ]
then
   echo "You have not entered a file"
elif [ -d $file ]
then
   echo "Your file is a directory"
elif [ -e $file ]
then
   sendToBin
else
  echo "Your file $file does not exist"
fi

正確に何が間違っているのかわかりません。最初のifステートメントにあると思います

4

2 に答える 2

0

チェック onは、位置パラメータをループする$#内でのみ実行されます。つまり、ループにより、 がゼロでない場合にのみ実行されます。チェックをループの外に移動してみてください。for[ $# -gt 0 ]$#

(また、ほとんどの$files を引用する必要があります ( "$file")。)

于 2013-04-18T04:25:24.423 に答える
0

私はそれを次のように書き直します:

#!/bin/bash

if (( $# == 0 )); then
    echo "You have not entered a file"
else
    for file in "$@"; do
        if [ -d "$file" ]; then
            echo "Your file is a directory"
        elif [ -e "$file" ]; then
            echo sendToBin "$file"
        else
            echo "Your file $file does not exist"
        fi
    done
fi

重要なポイント:

  • スクリプトの構造は、最初に引数が渡されたかどうかを確認する必要があります。何もない場合は、適切なメッセージを出力します。それ以外の場合は、各引数を処理します。を行いますif ... else for ...

  • 算術については、算術評価を使用します。マニュアルは、これらすべてをどこで使用できるかについて混乱していますが、if (( ... ))C-style も実行できますfor (( i = 0; i < n; i++ ))

  • 常に変数$fileを引用符で囲みます: "$file". ファイル名にスペースのような単純なものがある場合、それ以外の場合は壊れます。

于 2013-04-18T04:22:30.623 に答える