bash周りのメモ
Posted: | Categories: bash | Tags: bash, 変数
bash 5.1.4 で 2021/09/09 確認
文字列操作
VAR=onetwothree # 以下はこの VAR を操作するとして
| 表現 | 結果 | 意味 |
|---|---|---|
| ${VAR/two/four} | onefourthree | 値の中の文字列 two を four に置換 |
| $VAR | onetwothree | (元の変数自体は変わらない) |
| ${#VAR} | 11 | 文字数 |
| ${VAR/two} | onethree | 置換文字列を指定しないと一致文字列が削除される |
| ${VAR#one*t} | wothree | 値の前方からマッチする最短の文字列を取り除く |
| ${VAR##one*t} | hree | 値の前方からマッチする最長の文字列を取り除く |
| ${VAR%t*ee} | onetwo | 値の後方からマッチする最短の文字列を取り除く |
| ${VAR%%t*ee} | one | 値の後方からマッチする最長の文字列を取り除く |
| ${VAR: 0: 3} | one | 一番左の文字から 3 文字を取り出す |
| ${VAR: 2: 3} | etw | 2 番目の文字から 3 文字分を取り出す |
| ${VAR: 2} | etwothree | 第 2 パラメータを省略すると`末尾まで’の意となる |
| ${VAR: -4: 3} | hre | 末尾から数えて 4 番目の文字から、3 文字分を取り出す |
| ${VAR: -4} | hree | 第 2 パラメータを省略すると`末尾まで’の意 |
| ${VAR: -1} | e | 最後の 1 文字を取り出すにはこう |
シェルの組み込みコマンド
| コマンド | 効果 |
|---|---|
| : | 何もしないで終了コード 0 を返す。while : ;do …;done のように無限ループさせるのによく使う。 |
| . filename | filename で指定されたファイルを読み込んで中に書かれたコマンドを現在の環境で実行する。include のイメージ。 |
| break [n] | ループのを抜ける。n を指定すると n レベル外のループを抜ける。 |
| continue [n] | ループの次の繰り返し分から実行を継続する。n を指定すると n レベル外のループで実行を継続します。 |
| read [name …] | 標準入力から 1 行読み込み、最初の単語を最初の name に代入し、2 番目の単語を 2 番目の name に代入します。name が指定されなかったら REPLY に代入される。 |
| exec command [arguments] | 現在のシェルはこの command に置き換えられます。新しいプロセスは生成されません。exec 以降のスクリプトが実行されることはありません。 |
| exit [n] | ステータス n でシェルを終了させる。 |
| return [n] | ステータス n で関数を終了する。 |
| export name[=word] … | name を環境変数に設定します。word が指定された場合は環境変数 name に word が設定されます。 |
| よく使う構文 | 結果 | 効果 |
|---|---|---|
| $((1+1)) | 2 | 足し算 |
| $((2-2)) | 0 | 引き算 |
| $((2*2)) | 4 | 掛け算 |
| $((2/2)) | 1 | 割り算 |
| $((7%2)) | 1 | 余り |
| ++num あるいは num++ | インクリメント | |
| –num あるいは num– | デクリメント |
文字列分割して配列に入れる
old_ifs=$IFS
IFS=','
declare str='aaa,bbb,ccc'
declare -a record=($str)
IFS=$old_ifs
文字列の検索
declare str1='abcd'
declare str2='cd'
old_ifs=$IFS
IFS="$str2"
declare temp=($str1)
declare -i str1_len=${#str1}
declare -i temp_len=${#temp}
IFS=$old_ifs
if [ "$str1_len" -eq "$temp_len" ]; then
declare -i result=-1 #見つからなかったら-1
else
declare -i result=$temp_len # 見つかった場合はその位置
fi
read
データファイルを処理するためのちょっとしたスクリプトを書くのに ruby を使っていたけど,bash でもいろいろできるのね. # (1) パイプを使う
Read more...