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で始まるファイルやフォルダを引数として指定。フォルダを指定してしまっても弾かれるワケ。