- 投稿日:
シェルスクリプトでオプションパラメーターを解析するやつ
基本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
- 投稿日:
シェルスクリプトが設置されているパスを取得する
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
- 投稿日:
HTTPを始めFTPやLDAPなど多様なプロトコルに対応したクライアント
curl [options...] <url>
Options
ヘルプが充実してるのでヘルプ見たほうが早い
-X method
-X POST
とかするとそのメソッドを投げられる-XPOST
形式でも動く
-s
- 通信の進捗を表示しない
- 通信エラーも表示しない
-S
-s
が指定されている時にエラーを表示する
-L
- location headersを読む
- 3xx系のコードの追従する(302 redirectとか)
-sSL
でセットにして使うことが多い
-v
--verbose
- レスポンス内容が全部出る
- レスポンスヘッダを見る時に使える(
-I
でも見れるがHEAD methodを投げてるだけなので-X
と併用できない) - エラー出力されるのでgrepしたい時などは標準出力にリダイレクトが必要
2>&1
- レスポンスヘッダを見る時に使える(
-H
- ヘッダを投げられる
-H 'Content-Type: application/json'
-H 'User-Agent:' -H 'Accept:' -H 'Host:'
でcurl自身の既定ヘッダを消せる。但しHostヘッダーのないリクエストはRFC違反であるため受け付けられる保証はない
-d
x-www-form-urlencoded
を投げる時に使う-d key=value
- 複数あるときは複数指定する
- 暗黙的に
-X POST
扱いになる
--data-urlencode
-d
と同じだが中身がURLエンコードされる
-o <path>
- ファイルを保存する
- ダウンロード目当てならwgetのほうが使いやすい
例
JSONのPOST
curl -v -H 'Content-Type: application/json' -d '{ "hoge": "piyo" }' -- 'https://example.com'
参考
- 投稿日:
Proxy headerを設定しないとiOS Safari環境で上手くアクセスできないケースがあるのでやる設定
確認環境
Env | Ver |
---|---|
nginx | 1.19.8 |
サンプルコード
httpセクション
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
リバースプロキシ設定
location @prox {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass https://example.com;
}
- 投稿日:
ls -l | xargs echo
のようにして手前のコマンドの標準出力を渡すコマンド。そのコマンドの次に差し込まれる形になる
指定位置に結果を差し込む
echo 'bbb' | xargs -I{} echo "aaa"{}
-I{}
のように指定すると置換文字列を指定できる
echo 'bbb' | xargs -I{} echo "aaa"{}{}{}
- 複数書けば複数回置換される