Linux:bash
目次
引数(位置パラメータ)の処理
例
example.sh
#!/usr/bin/env bash echo $0 echo $1 echo $2 echo $3
実行結果
$ bash example.sh a1 a2 a3 example.sh a1 a2 a3
位置パラメータへのアクセス書式
$0 | 実行中のファイル名 |
$1 | 1番めの変数 |
$2 | 2番めの変数 |
$N | N番めの変数(0-9)だけ |
${N} | N番めの変数、10番以降は必須 |
$@ | $1..$N までの引数配列すべて |
$* | $@と同じ。ただしIFS区切り |
$# | 引数の個数。$0は除く |
${@: X: n} | x番目からN個のスライス |
※IFS とは $' ¥t¥n' つまり(スペース・タブ・改行)
引数をすべて、なくなるまで処理
while [ "$1" ] do echo "$1" shift done
もしくは
for i ; do echo $i; done
コマンドオプションを処理する
while : do case "$1" in -f | --file) file="$2" # You may want to check validity of $2 shift 2 ;; -*) echo "Error: Unknown option: $1" >&2 exit 1 ;; *) # No more options break ;; esac done
もしくは
while getopts ab:c: OPT do case $OPT in "a" ) FLG_A="TRUE" ;; "b" ) FLG_B="TRUE" ; VALUE_B="$OPTARG" ;; "c" ) FLG_C="TRUE" ; VALUE_C="$OPTARG" ;; esac done
getopts コマンドの第一引数にはシェルスクリプトに指定可能なオプションを指定し、さらそのオプションが値を要する場合は : (コロン) を付ける。上記の例では「$ command -a -b "BBB" -c "CCC"」といったコマンドラインになる。
テキスト処理
ファイルを行ごとに読み込んで処理。or文は最終行に改行コードがない場合の対応。
while read LINE || [ -n "${LINE}" ]; do echo "LINE: ${LINE}" done < /tmp/test.txt
IFS区切りで読み込んで処理
$ touch " abc " "ho ge" $'\txyz' $ ls | while IFS= read f; do echo "[$f]"; done [ xyz] [ abc ] [ho ge]
IFSを削除しながら読み込み
$ ls | while read f; do echo "[$f]"; done [xyz] [abc] [ho ge]
部分文字列の取得(スライス substr)
${パラメータ:オフセット:長さ}
$ str='abcdef' $ echo ${str:3} def $ echo ${str:3:1} d $ echo ${str:0:2} ab $ echo ${str:0:-2} abcd
% 右端からのパターン一致除外
$ HOGE=hoge.tar.bz2 $ echo ${HOGE} hoge.tar.bz2 # 最短除外 $ echo ${HOGE%.*} hoge.tar # 最長除外 $ echo ${HOGE%%.*} hoge
# 左端からのパターン一致除外
$ HOGE=/home/user/hoge $ echo ${HOGE} /home/user/hoge # 最短除外 $ echo ${HOGE#*/} home/user/hoge # 最長除外 $ echo ${HOGE##*/} hoge