シェルスクリプトの個人的備忘録。覚えたこと忘れないようにメモっておきます。
- 変数を参照
$var ${var} "$var" "${var}" - 特別な変数
# cat sp_var.sh #!/bin/sh echo $0 #スクリプトの名前 echo $1 #第1引数 echo $# #引数の総数 echo $* #引数すべてを""で囲む echo $@ #引数1つ1つを""で囲む
- 数値計算
# cat add.sh #!/bin/sh x=5 y=10 z=$((x+y)) echo $z
- 文字の条件文に使用する比較演算子
演算子 記述 意味 = x = y 同一文字列 != x != y 別の文字列 -z -z “” xが0文字 - 数値の条件文に使用する比較演算子
演算子 記述 意味 -ne x -ne y x != y -eq x -eq y x = y -gt x -gt y x > y -lt x -lt y x < y -ge x -ge y x >= y -le x -le y x <= y - if文
# cat if.sh #!/bin/sh if [ 3 -gt 2 ] then echo 3 は 2より大きい fi if [ 3 -lt 2 ] then echo ここは通らない else echo 2 は 3 より小さい fi - case文
# cat case.sh #!/bin/sh #引数チェック if [ $# -ne 1 ]; then echo "rhcpの曲を入力してください." echo "リスト)Snow,Under_the_bridge,Soul_to_squeese,Dosed" exit 1 fi case $1 in Snow) echo "冬に聞きたい曲ですね" ;; Under_the_bridge) echo "ジョンのギターが好きな曲です" ;; Soul_to_squeese) echo "イントロが大好きな曲です" ;; Dosed) echo "落ちつける曲ですね" ;; *) echo "rhcpの曲を入力してください" ;; esac - for文
#!/bin/sh for rhcpsong in snow dosed underthebridge do echo $rhcpsong done for result in $(ls) do echo $result done for result2 in `ls` do echo $result2 done#!/bin/sh for i in {1..10} do echo first_for done for (( i = 0; i < 10; i++ )) do echo second_for done - while文
#!/bin/sh while line= read -r line do echo $line done < rhcp-song - select文
#!/bin/sh PS3="番号で選択して下さい:" select var in snow dosed underthebridge exit do case $var in snow|dosed|underthebridge) echo "$varが選択されました。" ;; exit) break ;; *) echo "1〜4までの数字を指定して下さい。" ;; esac done - 置換
#!/bin/sh for i in snow-snow-snow snow-dosed-dosed do echo ${i/snow/snow(hey-oh)} #一部置換 done for i in snow-snow-snow snow-dosed-dosed do echo ${i//snow/snow(hey-oh)} #全部置換 done - ヒアドキュメント
#!/bin/sh cat << EOT snow dosed by the way under the bridge EOT
- 関数
#!/bin/sh start() { echo "オペレータ名:$1" echo "service starting!!" } stop() { echo "オペレータ名:$1" echo "service stopping!!" } case $1 in start) start $2 ;; stop) stop $2 ;; *) echo "usage{start|stop} and operator name." ;; esac
こんな感じです。もっと便利な書き方を覚えたら追記しようと思います。
参考URL: