2017-02-03 8 views
1

デスクトップのファイルを選択するとき、私は、スクリプトを持っていますが、私はこのケースの機能を実行する場合:スクリプトシェル:ケース問題

File=$(yad --file); 

if [[ "$File" =~ *".desktop" ]]; then 
echo "yes" 
else 
echo "no" 
if 

をし、私はこれを試してください:それは常に私に言っています

File=$(yad --file); 
case $File in 
    *.desktop) 
    echo "yes" 
    ;; 
    *) 
    echo "no" 
    ;; 
esac 

私はもう一度やり直さなければならない。何が問題なのか分からない、誰かが私を助けることができる?

+2

あなただけの等号を使用し、バッシュ条件文でglobスタイルのマッチングを使用することができます。私は少なくとも3つの構文エラーを見ることができます。 –

+0

'if/then'は' case'文ではありません。しかしcase文を使うことができます: 'case $ File in * .desktop)echo yes ;; *)エコー番号; esac; ' –

+0

私はすでにそれを試していますが、同じ問題が再試行を教えてくれます。 –

答えて

2

私はこのスクリプトを行うことになっているかを正確にわからないが、これを試してみてください。

File="$(Yad --file)" 

if [[ "$File" =~ .*[.]desktop$ ]]; then 
echo "yes" 
else 
echo "no" 
fi 

バッシュ正規表現のマッチング(=~)は、拡張正規表現を使用して、式をグロブありません。ゼロ個以上の文字のシーケンスを指定するには、.*を使用する必要があります。 .は「任意の文字」を意味し、*は0回以上を意味します。 [.]は、リテラル期間を指定し、単独で使用される.の「任意の文字」の意味を避けます。私はまた、行末アンカー($)を追加しました。これにより、パターンがファイル名の末尾に一致するようになります。

最初の行にもエラーがあります。 $記号とかっこの間にはスペースを入れないでください。 ifブロックを閉じるには、fiを使用する必要があります。 http://www.shellcheck.net/、それはあなたを示し、すべてのエラーを修正するにこれを貼り付けてスタート

if [[ "$File" = *.desktop ]]; then 
+0

' [[]] '内の変数を二重引用符で囲む必要はありません。 – codeforester

+4

@codeforester私は知っていますが、(少なくとも正規表現のパターンを除いて)どちらかを傷つけることはありません。そして、私はこれまでに引用するのに慣れています...多くの人にとって、どこでも引用するのはおそらく覚えやすく、引用する必要があるものとないものを覚えておいてください。 3: – Fred

+0

イム申し訳ありませんが、このスクリプトは './test.shとてもよく 仕事didntは./test.sh:[[:' == '/'の右側にある場合を除き no' –

関連する問題