毎日shellを少し勉強します:変数の基本的な操作


文書ディレクトリ
  • shell変数の定義
  • 定義変数
  • 変数命名仕様
  • 変数の使用
  • 文字列の動作
  • 単引用符、二重引用符
  • その他の一般的な操作
  • 文字列長
  • を取得する.
  • 文字列
  • を切り取る
  • 文字列位置
  • を取得する.
    shell変数の定義
    変数の定義
  • 変数を定義するときは変数名をそのまま使えばよい、$符号
  • を付ける必要はない.
  • 変数名と変数値、等号の間の .

  • 変数ネーミング仕様
  • の名前は英字、数字、下線のみ使用でき、頭文字は数字で始まる
  • は使用できません.
  • システム予約キーワード
  • は使用できません.
    コマンド#コマンド#
    意味
    !
    予約語、論理非
    :
    何もせずにパラメータ展開のみ
    .
    ファイルを読み込みshellで実行
    alias
    コマンドまたはコマンドラインエイリアスの設定
    bg
    ジョブをバックグラウンドで実行
    bind
    キーワードシーケンスをreadline関数またはマクロにバンドルする
    break
    予約語、for、while、until、selectループからジャンプ
    builtin
    コマンドの組み込みコマンドフォーマットを呼び出し、同じ名前の関数を無効にします.または同名の拡張コマンド
    case
    予約語、複数選択
    cd
    現在の作業ディレクトリの切り替え
    command
    内部建設と外部命令を探し出す.同じ名前の関数ではなく組み込みコマンドを探します
    continue
    ワードを保持し、次のfor、while、until、selectサイクルに到達
    declare
    変数定義変数属性の宣言
    dirs
    現在保存されているリストを表示
    disown
    リストからジョブを削除
    do
    保持ワード、for、while、until、selectループの一部
    done
    保持ワード、for、while、until、selectループの一部
    echo
    印刷パラメータ
    elif
    予約ワード、if構造の一部
    else
    予約ワード、if構造の一部
    enable
    組み込みコマンドのオン/オフ
    esac
    予約語、caseの一部
    eval
    パラメータをコマンドとして再処理
    exec
    shellの代わりに特定のプログラムを使用するか、shellのI/Oを変更します.
    exit
    shellを終了
    export
    変数を環境変数として宣言
    fc
    履歴コマンドとともに実行
    fg
    ジョブをバックグラウンドで実行
    fi
    リザーブワード、ifループの一部
    for
    予約ワード、forループの一部
    function
    関数の定義
    getops
    コマンドラインオプションの操作
    hash
    コマンドのパス名を記録して指定
    help
    組み込みコマンドのヘルプ情報を表示
    history
    履歴情報の表示
    if
    リザーブワード、ifループの一部
    in
    予約ワード、case、for、selectループの一部
    jobs
    バックグラウンドで実行されているジョブを表示
    kill
    プロセスに信号を送る
    let
    変数に算術演算を実行させる
    local
    ローカル変数の定義
    logout
    シェルからログアウト
    popd
    ディレクトリスタックからディレクトリをポップアップ
    pushd
    ディレクトリをスタックに押し込む
    pwd
    現在の作業ディレクトリを表示
    read
    標準入力から1行を読み込む
    readonly
    変数を読み取り専用として定義
    return
    関数またはスクリプトから戻る
    select
    予約語、生成メニュー
    set
    Shellオプションの設定
    shift
    コマンドラインパラメータの変換
    suspend
    シェルの実行を終了
    test
    評価条件式
    then
    予約ワード、if構造の一部
    time
    予約ワードは、統計されたコマンド実行時間を出力し、その出力フォーマットはTIMEFORMAT変数によって制御される
    times
    ShellとそのサブShellに対して、ユーザとシステムCPUの時間と
    trap
    キャプチャプログラムの設定
    type
    コマンドのソースを特定
    typeset
    変数を宣言し、変数属性を定義しdeclareと等価
    ulimit
    プロセスに使用されるリソース制限の設定と表示
    umask
    ファイル権限コードの設定と表示
    unalias
    エイリアス定義の解除
    unset
    変数または関数の定義を解除
    until
    リザーブワード、ループ構造
    wait
    バックグラウンドジョブの完了を待つ
    while
    リザーブワード、ループ構造
    変数の使用
    変数を使用するには、前に$を追加するだけです.
    [root@hadoop-master ~]# my_name="leo825"
    [root@hadoop-master ~]# echo $my_name
    leo825
    [root@hadoop-master ~]# echo ${my_name}
    leo825
    

    カッコを付けるかどうかは、状況によって異なります.コンパイラの曖昧さを引き起こす場合は、変数境界を区別するために追加する必要があります.
    [root@hadoop-master ~]# echo "my name is ${my_name}"
    my name is leo825
    

    変数の削除
    [root@hadoop-master ~]# unset my_name
    [root@hadoop-master ~]# echo ${my_name}
    
    [root@hadoop-master ~]# 
    

    文字列の操作
    一重引用符、二重引用符
    [root@hadoop-master ~]# my_name="leo825"
    [root@hadoop-master ~]# echo '     :${my_name}'
         :${my_name}
    [root@hadoop-master ~]# echo "     :${my_name}"
         :leo825
    [root@hadoop-master ~]# echo "     :\"${my_name}\"""leo825"
    

    上記の比較から以下のようにまとめられています.
  • 単一引用符の文字列はすべてそのまま出力されるので、単一引用符で変数
  • を配置しないでください.
  • 二重引用符は変数を配置することができ、エスケープ文字
  • を使用することができる.
    その他の一般的な操作
    文字列の長さの取得
    [root@hadoop-master ~]# echo ${my_name}
    leo825
    [root@hadoop-master ~]# echo ${#my_name}
    6
    

    切り取り文字列
    切り取りフォーマットです.これは左からカウントされます.
    ${string: start :length}
    

    ここで、stringは切り取る文字列、startは開始位置(左から、0からカウント)、lenthは切り取る長さ(省略すると文字列の末尾まで)
    [root@hadoop-master ~]# echo ${my_name}
    leo825
    [root@hadoop-master ~]# echo ${my_name:1:2}
    eo
    [root@hadoop-master ~]# echo ${my_name:1}
    eo825
    

    切り取りフォーマットです.これは右からカウントされます.
    ${string: 0-start :length}
    

    このフォーマットは前のフォーマットより0-多く、これは固定的な書き方で、文字列の右からカウントされることを表しています.この方式は2点に注意しなければならない.
  • 左からカウントを開始すると、開始数字は0である.右からカウントを開始すると、開始数字は1です.カウント方向が異なり、開始数字も異なります.
  • どの方向からカウントを開始しても、切り取り方向は左から右になります.
  • [root@hadoop-master ~]# echo ${my_name}
    leo825
    [root@hadoop-master ~]# echo ${my_name:0-3:2}
    82
    

    右から数えるのはよくわかりませんが、この手順ではまず右から1番目に左に3番目のビットを調べるのが8で、それから右に2番目のビットを数えるのが82です
    文字列の場所の取得
    [root@hadoop-master ~]# echo ${my_name}
    leo825
    [root@hadoop-master ~]# echo `expr index "$my_name" 8`
    4
    

    以上のスクリプトでは、「`」は逆引用符であり、単引用符「'」ではなく、見間違えず、命令を実行する必要があるものはすべて逆引用符であり、Escキーの真下のキーである.