8ttyan’s blog

コンピュータ関係の小ネタ

bash scriptのつまづきやすいポイント・コツ

bashシェルスクリプトを書くと、通常の言語と違う(?)部分があって困ったのでメモ。

まず、変数への代入はイコールの前後にスペースは空けてはいけない。

#!/bin/bash
hoge=273  #これはOK
hage = 273  #これはエラー

if文は実はtestコマンド(の省略形)を使っているので、通常の言語と異なった書き方。
詳しくは以下のサイトを参照。

たとえばこのように書く。if文の括弧[]と条件式の間にはスペースを入れないとエラーが起きるので注意。

#!/bin/bash

hoge="snoopy"

if [ ${hoge} = "snoopy" ]; then  #括弧[]と条件式の間にはスペースをあけないといけない!
  echo "真です"
else
  echo "偽です"
fi  #if文終了の合図

if [ ${hoge} -ne "snoopy" ]; then   #-neオプションはtestコマンドのノットイコールの意味
  echo "snoopyではない"
else
  echo "snoopyです"
fi

よく使うのは、各引数についてループさせ、それぞれファイルかどうか判定して処理をするようなやつ。

#hoge.sh
#!/bin/bash
for i in $@   #「$@」はこのscriptのすべての引数を配列として表す。各引数についてループ
do               # for文のループゾーンの開始点を明記
 if [ -f $i ]     # 引数 $i がファイルかどうか
 then
  echo "$i is a file."
  :
  処理
  :
 fi
done       #forループ終了

これをhoge.shとして保存したら、ターミナル上で例えば

$ ./hoge.sh *.txt

とすれば、なんとか.txt というファイルを引数として読み込む。

$ ./hoge.sh hoge*

とすれば、hogeで始まるファイルやフォルダを引数として指定。フォルダを指定してしまっても弾かれるワケ。