検索条件
お知らせ
現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
cwd=$(cd $(dirname $0); pwd)
$0
はシェルスクリプトのフルパス
dirname
でスラッシュから始まるファイル名を除去
cd
で移動
pwd
で表示
これはサブシェルを使うと出来る
サブシェルとは()
で囲まれた部分で、この中では別のシェルが動いている
例えば次のスクリプトはfoo/
に移動し中のファイルリストを表示するが、2行目では現在の位置にあるファイルリストを表示するため移動していない
コマンド展開記法$()
もサブシェルが動いている
- 以下のように書くと連続で線形実行される。手前が異常終了しても続く
コマンドの末尾に&
をつけるとバックグラウンドで実行される
- 以下の例では左がバックグラウンド、右がフォアグラウンドで実行される
AndAlso的な動きをする
- 以下のように書くと連続で線形実行される。手前が異常終了すると続かない
コマンドの末尾に|
をつけると標準出力が次にリダイレクトされる
- 以下のように書くと連続で線形実行される。手前の標準出力が次にリダイレクトされる
echo 1 | xargs -I{} echo {}2
OrElse的な動きをする
- 以下のように書くと連続で線形実行される。手前が異常終了した場合のみ次が動く
HTTPを始めFTPやLDAPなど多様なプロトコルに対応したクライアント
curl [options...] <url>
ヘルプが充実してるのでヘルプ見たほうが早い
-X method
-X POST
とかするとそのメソッドを投げられる
-XPOST
形式でも動く
-s
-S
-L
- location headersを読む
- 3xx系のコードの追従する(302 redirectとか)
-sSL
でセットにして使うことが多い
-v
--verbose
- レスポンス内容が全部出る
- レスポンスヘッダを見る時に使える(
-I
でも見れるがHEAD methodを投げてるだけなので-X
と併用できない)
- エラー出力されるのでgrepしたい時などは標準出力にリダイレクトが必要
-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
-o <path>
- ファイルを保存する
- ダウンロード目当てならwgetのほうが使いやすい
curl -v -H 'Content-Type: application/json' -d '{ "hoge": "piyo" }' -- 'https://example.com'
Proxy headerを設定しないとiOS Safari環境で上手くアクセスできないケースがあるのでやる設定
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"{}
echo 'bbb' | xargs -I{} echo "aaa"{}{}{}
文字列を編集したりするのに大変便利なやつ。sedやawkの代わりに使える。構文はPerlそのものが使える。なにせPerlなので
-e
- ワンライナーでコードを書くやつ
php -r
やnode -e
と同じ
- Evaluate, Eval, 評価
-n
- 入力の各行に対し処理がかかる
$.
で行番号、$_
で行の文字列を取得できる
while (<>)
相当の処理
-p
- 入力の各行に対し処理を行い、更に
print $_
相当の処理を実行する
-l
- 入力(
$_
)から改行文字を削除し出力に改行を追加する
-a
- 入力の各行に対して
awk
相当の文字列分割処理を行う(autosplit mode with -n or -p)
- 分割した文字は
$F
に配列として入るので次のようにして取得できる
perl -ale 'print "$F[0] - $F[1]'
$#F
を指定すると分割した個数が取れる
-F/pattern/
-a
でsplitするパターンを設定する
- 例えば
-F,
とするとCSVを分割できる
-i[ext]
- ファイルを編集する
- 使用例:
perl -i -pe 's/aaa/xxx/' foo.txt
-i.bak
のように指定するとバックアップファイルが作成される
- このオプションは次に続く文字が解釈されるため、単体で指定する必要がある(
-ipe
のようには使えない)
変数を指定しない場合、基本的に$_
として扱われる
print
- 標準出力に出力
- 単体では
print $_
と同じ挙動をする
$hoge =~ s/foo/bar/
/(.+)/; print $1
- キャプチャした内容を出力
- コマンド例:
echo hoge.jpg | perl -ne '/(.+)./; print $1'
$_
- 基本的に書かなくても補完される
- 例えば
echo aaabbc | perl -ne 's/c/d/; print'
の出力はaaabbd
となる
- その他特殊変数:https://perldoc.jp/docs/perl/5.18.1/perlvar.pod
END{}
- このブロックで囲んだコードは実行時の最後に動作する
-n
, -p
を指定した場合、END{}
は$_
が取れないので渡す場合は$x = $_; END{ print $x }
のように別の変数に代入する必要がある
- https://perldoc.jp/docs/perl/5.38.0/perlmod.pod#BEGIN44-32UNITCHECK44-32CHECK44-32INIT32and32END
一例
ls -l | perl -ale '$F[8] =~ s/\.html//; print "$F[8]";'
1のところが行数なので、ここを変えることで任意の行の文字列を取れる
perl -ne 'print if $. == 1'
echo "foo bar" | perl -pe 's/(?<first>.+) (?<last>.+)/$+{first}-$+{last}/'
unshift
で配列の先頭に値を追加し、END{}
で最後に出力している
cat <<EOF | perl -ne 'unshift @x, $_; END{ print @x }'
aaa
bbb
ccc
EOF