2016-12-16 4 views
0

私は最初のバックアップスクリプトを作成しようとしているBashスクリプトが初めてです。 )(、私は["var"="1"]||["var"=2]、二重括弧のように、多くの異なる構文を試してみましたBashスクリプトがブール論理を認識できない、「コマンドが見つかりません」

./backupscript.sh: line 9: [3=1: command not found 
./backupscript.sh: line 9: 3=2]: command not found 
./backupscript.sh: line 15: [3=1: command not found 
./backupscript.sh: line 15: 3=3]: command not found 

、引用符なしのシングルとダブル-bracketsと私は私の心を失っている:私はそれを実行すると、私はいつもこのような何かを得ます。 bashがif文であることを全く認識していないようです。どうしましたか?ありがとう!

#!/bin/bash 

cd/
NOW=$(date +"%m_%d_%Y") 
echo "Please input: 1=full 2=system 3=home" 
read choice 

if ["$choice"="1" || "$choice"="2"]; then 
echo "--- STARTING SYSTEMBACKUP ---" 
tar -cvpzf systembackup_$NOW.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/systembackup.tar.gz --exclude=/mnt --exclude=/sys --exclude=/dev --exclude=/run --exclude=/media --exclude=/home/
echo "--- SYSTEM BACKUP DONE ---" 
fi 

if ["$choice"="1" || "$choice"="3"]; then 
echo "--- STARTING HOMEBACKUP (excluding ~/Seafile) ---" 
tar -cvpzf homebackup_$NOW.tar.gz --exclude=/home/matias/Seafile /home 
echo "--- HOMEBACKUP DONE ---" 
fi 

編集:ここで示唆されている正しい構文は、ありがとうございました!私はまだバッシュに良いガイドを探しています:)

+3

'[': '[$ choice" == "1" ...]などのようにスペースを入れてください。 – fedorqui

+0

if文の修正に加えて、間違ったディレクトリにあるアクションが発生する可能性があるので、 'cd /'に注意する必要があります。 – Zlemini

+0

人的支援を依頼する前にhttp://shellcheck.net/を試してください。 – tripleee

答えて

0

ベストプラクティスとして、以下を使用します。

if [[ $choice == 1 || $choice == 2 ]]; then 
    ... 
fi 

お知らせ平等のテストのためのspaces==

||および&&double bracketsで動作します。また、=~と一致するようなREGEXのようないくつかの他の素敵な機能がありますが、それはC-like languagesで知られているように、驚きも少​​なくありません。

+1

いくつかの重要なスペースを除外しました。 – chepner

+0

この情報をお寄せいただきありがとうございます。実際にはこれをbashで実行しました。 –

0

@fedorquiが述べたように、ブラケットの周囲にスペースが必要です。これは、[が実際にはtestの同義語であり、実際のプログラムであり、実際のコマンドの名前も同じであるためです。

将来的には、スペースや二重括弧([[]])を使用してください。これらはbashによって内部的に処理され、変数置換に関する引用符を忘れるなどの偶発的なエラーに対してより堅牢です。プラス、&&||は二重角括弧内の論理ANDとORとして機能しますが、ではなくであり、[ ]の代わりに-a-oの式を使用する必要があります。

if [[ $choice = 1 || $ choice = 3 ]]; then 
    ... 
fi 

を、あなたが期待する結果を得る:二重括弧(bashで"conditional expressions")を使用して

、あなたが書くことができます。

+1

'-a'と' -o'は廃止されたものとみなされ、新しいコードでは使用しないでください。 '[...] && [...]'と '[...] ||を使います。 [...] '(つまり、2つの別々の' ['コマンド)。 – chepner

+0

@chepnerそれを知らなかった!詳細へのリンクを教えてください。ありがとう! – cxw

関連する問題