シェルスクリプトについてのまとめ (随時更新)
1. シェルスクリプトの書き方
- ファイルに書くときは文頭に
#/usr/bin/sh
を書く。 - コメントは行頭に
#
を書く。 - プログラムにシェルスクリプトの出力を渡すときは`で囲めばいい。
- eg.
python3 -c "print(\"`echo $PWD`\")"
- eg.
2. ファイルの圧縮、展開
- 展開
tar xvf hoge.tar unzip hoge.zip
- 参考
圧縮、解凍コマンドまとめ
3. grep
拡張子を指定するにはgrep -r --include=".cpp" pattern
とする。
4. パーミッション、所有者
# パーミッションの変更 chmod -R [再帰] 775 dir # 所有者の変更 chown -R [再帰] username dir # 所属グループの変更 chgrp -R [再帰] groupname dir
パーミッションについてはファイルのアクセス権についてにまとめた。
5. 並列処理
pythonはGILがかかっているし、Rでも特に何もしなければ並列実行はしてくれない。どちらもmultiprocessing、snowで可能だがシェルスクリプトを利用すれば、計算が独立な場合に限るが簡単に並列計算ができる。
xargsを使う方法
xargs -L [コマンドに渡す引数の最大個数] -P [並列実行できる最大数 (0で可能なだけ最大数)]
- 例
yes 1 | head -n 10 | xargs -L 1 -P 0 sleep
yes 1 | head -n 10 | xargs -L 1 -P 1 sleep
(for i in 1 2 3 4; do echo $i; done) | xargs -L 2 -P 0 echo
(for i in 1 2 3 4; do echo $i; done) | xargs -L 1 -P 0 echo
xargsに関数を渡したい
xargsにbashのfunctionを渡す方法
関数の使用方法参考
xargs を使ってカジュアルに並列処理
シェルスクリプトのみで xargs を利用した同時実行数の制御Add Star
xargs でシェルスクリプトの並列実行
バックグラウンドに飛ばす方法(1つ目との違いは不明)
dosomething &
for i in 1 2 3 4; do python veryheavy.py $i &; done
for i in 1 2 3 4; do R --vanilla --slave --args $i < veryheavy.R &; done
Gnu Parallelを使う方法
リンクのみ: GNU Parallelがすごすぎて生きるのがつらい
6. プロセスの表示、終了
ps aux # 強制終了 kill -9 pid # 再起動 kill -HUP pid
7. ネットワーク関連
- DNSサーバーの確認:
dig
- ネットワーク設定:
/etc/network/interfaces
8. エラー処理
set -e
: exit 0以外で停止するset -u
: 未定義変数があれば停止するset -x
: 実行時情報を表示するset +e
: set -eを取り消すset -euxo pipefail
: パイプの中のエラーでも停止lspci | grep -i nvidia || :
:||:
や||true
でエラーを握りつぶす
参考: シェルスクリプトを書くときはset -euしておく - Qiita
9. シェルスクリプトからPythonを起動する
#!bin/sh """ ここにシェルスクリプトを書く -> このファイルをpythonインタプリタで実行 """ ここにpythonスクリプトを書く