(シェルスクリプト)メモメモ

投稿者: | 2016年11月19日

シェルスクリプトの個人的備忘録。覚えたこと忘れないようにメモっておきます。

  • 変数を参照
    $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:

シェルスクリプト入門 書き方のまとめ