2022/01/04(火)while:ループ処理
2022/01/04(火)shift:配列を頭から取り出す
更新日:
投稿日:
投稿日:
引数をスペース区切りで先頭から取り出すやつ。本質は配列操作だと思う
基本
shift 2のようにするとシフト数を指定できる
while [ "$1" != "" ]
do
echo $1
shift
done
foo.sh abc deを叩くと以下の出力が得られる
abc
de
2022/01/04(火)case:switchみたいなやつ
2021/11/12(金)getopts:コマンドラインオプションの取得
更新日:
投稿日:
投稿日:
シェルスクリプトでオプションパラメーターを解析するやつ
基本shiftと合わせて使う
サンプルコード
とりあえず最低限の動作サンプル的なやつ
#!/bin/bash
usage_exit () {
echo "Usage: $0 [-p piyo] [-f] <foo> <bar>"
exit 1
}
# オプション名の後ろに `:` をつけるとパラメーターを取れる、つけないと取れない
# オプション先頭に `:` をつけるとエラーハンドリングを自動でしなくなる
# e.g. `getopts :p:fh`
while getopts p:fh OPT
do
case $OPT in
p) piyo=$OPTARG
;;
f) fuga=1
;;
h) usage_exit
;;
\?) usage_exit
;;
esac
done
# オプション分の引数をずらす
# これがないとオプションが `$1` とかに入ってくる
shift $((OPTIND - 1))
# オプションを抜いた引数を取る
foo=$1
bar=$2
echo $foo
echo $bar
echo $piyo
echo $fuga
2021/11/10(水)Bash Tips
更新日:
投稿日:
投稿日:
シェルスクリプトが設置されているパスを取得する
cwd=$(cd $(dirname $0); pwd)$0はシェルスクリプトのフルパスdirnameでスラッシュから始まるファイル名を除去cdで移動pwdで表示
現在のパスを移動せずにシェルスクリプト内でパスを移動する
これはサブシェルを使うと出来る
サブシェルとは()で囲まれた部分で、この中では別のシェルが動いている
例えば次のスクリプトはfoo/に移動し中のファイルリストを表示するが、2行目では現在の位置にあるファイルリストを表示するため移動していない
コマンド展開記法$()もサブシェルが動いている
(cd foo/; ls -la)
ls -la
複数コマンドをワンライナーで実行する
;
- 以下のように書くと連続で線形実行される。手前が異常終了しても続く
curl; echo 2;
&
コマンドの末尾に&をつけるとバックグラウンドで実行される
- 以下の例では左がバックグラウンド、右がフォアグラウンドで実行される
echo 1 & echo 2
&&
AndAlso的な動きをする
- 以下のように書くと連続で線形実行される。手前が異常終了すると続かない
curl && echo 2
|
コマンドの末尾に|をつけると標準出力が次にリダイレクトされる
- 以下のように書くと連続で線形実行される。手前の標準出力が次にリダイレクトされる
echo 1 | xargs -I{} echo {}2
||
OrElse的な動きをする
- 以下のように書くと連続で線形実行される。手前が異常終了した場合のみ次が動く
curl || echo 1