0

私のスクリプトは本来の目的を果たしていると思います。最初は

#!/bin/bash
for file in /home/parallels/Desktop/trashcan/*
    do
    echo "Would you like to delete - " $file 
done 

次に、明らかに不足している機能を追加したかったので、今は

#!/bin/bash
for file in /home/parallels/Desktop/trashcan/*
do
    echo "Would you like to delete - " $file
    read line
    if [$line == y|Y]
        sudo rm $file
fi
done 

それが私が今いるところです。必要なケースステートメントを使用した作業スクリプトがあるため、最初はifの代わりにケースステートメントを使用しようとしましたが、単純にコピーすると同じエラーが発生します-構文エラーの近く予想外のトークン、私はこれをfiで取得して完了しました

4

3 に答える 3

1

[はコマンドなので、最初の引数から空白で区切る必要があります:

if [ "$line" = y ] || [ "$line" = Y ]; then
    sudo rm "$file"
fi

を使用している場合はbash、上記の標準的な使用法をより簡潔な使用法に置き換えることができます

if [[ $line = [yY] ]]; then
    sudo rm "$file"
fi

Keith Thompson が指摘したように、正確に 'y' または 'Y' の回答のみがファイルの削除を許可します。「はい」または「はい」も許可するには、次を使用できます

shopt -s extglob
if [[ $line = [yY]?(es) ]]

(このshopt行は、 の以前のバージョンでのみ必要ですbash。バージョン 4 以降では、拡張パターンが条件式のデフォルトです。)

于 2013-08-01T18:00:42.207 に答える
0

同様の問題に直面しました。Windows で .sh ファイルを開きましたが、Windows はすべての行の末尾に CRLF を追加しました。

実行してこれを見つけました

cat --show-nonprinting filename.extension

例えば

cat --show-nonprinting test.sh

次に、使用して変換しました

dos2unix filename.extension

例えば

dos2unix myfile.txt
dos2unix myshell.sh
于 2014-06-25T13:12:45.313 に答える
0

if 部分は

if [ "$line" = "y" ] || [ "$line" = "Y" ]
then
    sudo rm $file
fi
于 2013-08-01T18:00:34.937 に答える