参考サイト
基本サンプルコード
#!/bin/bash ################################################################################ # test.sh ################################################################################ echo "test" #echo "test2" > info.txt ################################################################################ #シェル変数、参照する時は$をつける($str)、代入する時はスペースを入れていけない ################################################################################ str="hoge" ################################################################################ #特殊変数鵜 # $n nは数字であり、$0はシェルスクリプト名、以降$1、$2…は第1引数、第2引数…である。第10引数以降は${10}、${11}…で参照する。 # $# 与えられた引数の個数 # $@ $0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1" "$2" …"のように個別に展開される。) # $* $0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1 $2 …"のように展開される。) # $? 最後に実行したコマンドの終了ステータス # $! 最後に実行したバックグラウンドコマンドのPID # $$ シェルのPID # $- 現在のオプションフラグ ################################################################################ echo "------------------------- 特殊変数" echo ${0} echo ${#} echo ${@} echo ${*} echo ${?} echo ${!} echo ${$} echo ${-} ################################################################################ # 算術演算子 # 数値演算、関係演算(result=`expr 計算式`)でOK # 文字列演算() ################################################################################ echo "------------------------- 演算子" san1=`expr 10 + 20` san2=`expr 20 - 10` echo "算術結果:" ${san1} echo "算術結果:" ${san2} num1=30 num2=20 san3=`expr ${num1} > ${num2}` #これは失敗 echo "関係演算:" ${san3} san4=`expr index "abc" "ab"` echo "文字列演算結果:" ${san4} san5=`expr length "abcdefg"` echo "文字列演算結果:" ${san5} san6=`expr substr "aiueo" 2 3` echo "文字列演算結果:" ${san6} ################################################################################ # if(条件を" [ ] "で囲む場合は" [ "及び" ] "の前後に半角スペースを入れる必要があることに注意してください。) #ファイル形式のチェック #-b ファイル名 指定したファイルがブロックデバイスファイルなら真である。 #-c ファイル名 指定したファイルがキャラクタデバイスファイルなら真である。 #-d ファイル名 指定したファイルがディレクトリなら真である。 #-f ファイル名 指定したファイルが通常ファイルなら真である。 #-L ファイル名 指定したファイルがシンボリックリンクなら真である。 #-p ファイル名 指定したファイルが名前付きパイプなら真である。 #-S ファイル名 指定したファイルがソケットなら真である。 #ファイルパーミッションのチェック #-g ファイル名 指定したファイルにSGIDがセットされていれば真である。 #-k ファイル名 指定したファイルにスティッキービットがセットされていれば真である。 #-r ファイル名 指定したファイルが読み取り可能なら真である。 #-u ファイル名 指定したファイルにSUIDがセットされていれば真である。 #-w ファイル名 指定したファイルが書き込み可能なら真である。 #-x ファイル名 指定したファイルが実行可能なら真である。 #その他のファイルのチェック #-e ファイル名 指定したファイルが存在すれば真である。 #-s ファイル名 指定したファイルのファイルサイズが0より大きければ真である。 #文字列のチェック #-n 文字列 文字列の長さが0より大きければ真である。 #-z 文字列 文字列の長さが0であれば真である。 #文字列1 = 文字列2 2つの文字列が等しければ真である。 #文字列1 != 文字列2 2つの文字列が等しくなければ真である。 #数値のチェック #数値1 -eq 数値2 2つの数値が等しければ真である。 #数値1 -ge 数値2 数値1が数値2以上であれば真である。 #数値1 -gt 数値2 数値1が数値2より大きいのであれば真である。 #数値1 -le 数値2 数値1が数値2以下であれば真である。 #数値1 -lt 数値2 数値1が数値2未満であれば真である。 #数値1 -ne 数値2 2つの数値が等しくなければ真である。 #論理結合 #!条件 条件が偽であれば真である。 #条件1 -a 条件2 条件1と条件2の両方が真であれば真である。 #条件1 -o 条件2 条件1と条件2のどちらかが真であれば真である。 ################################################################################ echo "------------------------- if [...]" if [ "${str}" = "hoge" ] then echo "strはhogeです" else "strはhogeではない" fi echo "------------------------- if test" if test "${str}" = "hoge" then echo "strはhogeです" fi echo "------------------------- ifディレクトリチェック" #ディレクトリチェック t_dir="test_dir" if [ -d ${t_dir} ] then echo ${t_dir} "はディレクトリだ" fi echo "------------------------- ifファイルチェック" #ファイルチェック if [ -e "info.txt" ] then echo "info.txtは存在する" fi ################################################################################ # case ################################################################################ echo "------------------------- case" str2="abc" case ${str2} in "abc") echo "abc";; "def") echo "def";; esac ################################################################################ # for ################################################################################ echo "------------------------- for" for aa in aka ao ki do echo ${aa} done ################################################################################ # while ################################################################################ echo "------------------------- while" count=3 while [ ${count} -gt 0 ] do echo "${count}" count=`expr ${count} - 1` done ################################################################################ # until ################################################################################ echo "------------------------- until" count=3 until [ ${count} -eq 0 ] do echo ${count} count=`expr ${count} - 1` done ################################################################################ # break,continue(他と同じなので無し) ################################################################################ ################################################################################ # 関数 # 関数に引数を渡す場合は、シェルと同じようにスペース区切りで渡します。 # 関数に渡された引数を参照する場合も、シェルと同じように「$1, $2, ...」と参照します。 # 呼び出し元に終了コードを返す場合は「return コード」と記述します。 ################################################################################ echo "------------------------- 関数" arg_chk() { if test ${#} -eq 2 then return 0 else return 1 fi } arg_chk 1 2 ret=${?} #最後に実行したコマンドの終了ステータスが戻り値 echo ${ret} ################################################################################ # サンプルスクリプト ################################################################################ echo "------------------------- ls *.txtの結果、正規表現のテスト" for txt in `ls *.txt` do if [[ ${txt} =~ ^info ]] #正規表現をダブルコートで囲まない事! then echo ${txt} fi done echo "------------------------- ファイル読み込み" while read line do echo ${line} done < "info2.txt" echo "------------------------- 他のファイルを読み込む、[ドット][スペース][ファイル名]" . lib.sh hello "テスト" echo "------------------------- ディレクトリのファイルリストを取得、lsコマンドの結果を展開" for f in $(ls -a) #コマンド実効、$(コマンド) do if [ -f ${f} ] then echo ${f} fi done echo "------------------------- ディレクトリのファイルリストを取得、findコマンドの結果を展開" dir="./" for f in $(find ${dir}) do if [ -f ${f} ] then base=$(basename ${f}) echo ${base} fi done echo "------------------------- getopts" LIST= TYPE= opt= while getopts l:t: opt do case ${opt} in l) LIST=${OPTARG} ;; t) TYPE=${OPTARG} ;; # \?) # exit 1 # ;; esac done echo "LIST=${LIST}" echo "TYPE=${TYPE}" echo "------------------------- シーケンス" for i in 'seq 0 9' do echo $i done