問題があり、シェルスクリプトを使用してプログラムを書く必要があるので、Linuxに関する本を開いてBashスクリプトの章がありました。コマンドに出会ったときにコマンドをテストするためのテストスクリプトを書くのは良い考えのようですが、最初のスクリプトはうまくいきませんでした。
例に示すスクリプトは次のとおりです。
#!/bin/bash
count=10
nextcount=$count + 1
echo $count
echo $nextcount
このスクリプトを実行した結果は何ですか?
[Carl@localhost bin]$ testscript
10
11
しかし、実際の結果は
[Carl@localhost bin]$ testscript
/home/Carl/bin/testscript: line 3: +: command not found
10
エラーメッセージは、「+」記号がプラス演算子ではなくコマンドとして解釈されることを示します。
「+」記号の周囲のスペースを削除すると、スクリプトは次のようになります。
#!/bin/bash
count=10
nextcount=$count+1
echo $count
echo $nextcount
[Carl@localhost bin]$ testscript
10
10+1
11を得るために10に1を加える代わりに、3行のステートメントは「10」、「+」、および「1」を連結します。
line3を読むように変更したり、nextcount=$count +1
何のnextcount=$count+ 1
効果もありません。
スクリプト教科書の最初の例では、解決できない問題を見つけることは起こりません。私が狂っていますか?
ベストアンサー1
いつものように、シェルから割り当てます。確かにスペースを許可します(参照:シェルスクリプトの変数代入のスペースvar=foo bar
):コマンドを実行してbar
設定var
するのと同じですfoo
。あるいは、あなたの場合、コマンドはシェルに特別な意味がないので、+
大丈夫です(とにかくこの場合ではありません)。+
また、プラス記号は通常の文字なので、var=1+1
右側を文字列として扱います。1+1
特別な意味(例えば、、;
または(
)がある場合は引用する必要があります。
シェルで算術を実行する標準的な方法は拡張であるため、$(( ... ))
数値を追加して変数に割り当てるには、次のようにします。
anothervar=$((var + 1))
Bash/ksh/zsh を使用していて、一定の繰り返し回数だけ繰り返す場合は、次を使用できます。
for (( i = 0; i < 10 ; i++)); do something ; done
(for i in {1..10}
また、可能ですが、Bashでは中括弧拡張の内部では変数拡張は機能しません。)