「よく使うシェルコマンド」の版間の差分
(→pwdによる注意事項) |
(→if文) |
||
行10: | 行10: | ||
<br> | <br> | ||
− | + | 条件、処理が長いときは改行やタブ、空白を使用すると、読みやすいようになります。<br> | |
<pre> | <pre> | ||
− | if [ (条件1) ]; then | + | if [ (条件1) ]; then |
− | (処理A); | + | (処理A); |
− | if [ (条件2) ]; then | + | if [ (条件2) ]; then |
− | (処理B); | + | (処理B); |
− | fi; | + | fi; |
− | (処理C); | + | (処理C); |
fi | fi | ||
</pre> | </pre> | ||
行24: | 行24: | ||
elif, else付き | elif, else付き | ||
<pre> | <pre> | ||
− | if [ (条件1) ]; then | + | if [ (条件1) ]; then |
− | (処理A); | + | (処理A); |
− | elif [ (条件2) ]; then | + | elif [ (条件2) ]; then |
− | (処理B); | + | (処理B); |
− | else | + | else |
− | (処理C); | + | (処理C); |
fi | fi | ||
</pre> | </pre> |
2014年12月22日 (月) 00:30時点における版
ここではコマンド、Makefile、PIONEなどの作成や実行においてよく使うシェルコマンドを簡易的にリストアップしています。
目次
制御文
if文
基本形
if [ (条件) ]; then (処理); fi
ifの後、[の後、]の前には空白が必要
条件、処理が長いときは改行やタブ、空白を使用すると、読みやすいようになります。
if [ (条件1) ]; then (処理A); if [ (条件2) ]; then (処理B); fi; (処理C); fi
elif, else付き
if [ (条件1) ]; then (処理A); elif [ (条件2) ]; then (処理B); else (処理C); fi
条件
コマンド | 用途 | 例 |
---|---|---|
-e | ファイル、ディレクトリが空か調べる | if [ -e Input.txt ] ; then echo "Input.txt is not empty!" fi |
! | 条件の反転 | if [ ! -e Input.txt ] ; then echo "Input.txt is empty!" fi |
-d | ディレクトリの有無を調べる | if [ -d Input.txt ] ; then echo "Input is not directory!" fi |
ループ文
for文
for (i=0; i < Max; i++) タイプ
括弧()を二重にして使用することに注意しましょう。
例
for (( i=0; i<5; i++ )); \ do \ echo "$i"; \ done \
実行結果
0 1 2 3 4
for in
#配列などを利用したリストでループを作成できます。
for (変数名) in (配列) ; do (コマンド); done
例
ARRAY=(ABC EFG HIJ) for data in ${ARRAY[@]} ; \ do \ echo "$data"; \ done
実行結果
ABC EFG HIJ
while文
while [ (条件) ] ; \ do \ (コマンド); \ done
配列
入力
(配列名)=((値1) (値2) ...)
出力
1つだけ出力するとき
${(配列名)[(番号)]}
全ての値を出力するとき
${(配列名)[@]}
要素数を出力するとき
${#(配列名)[@]}
例
コマンド
ARRAY=(123 456 789) echo "${ARRAY[2]}" echo "${ARRAY[@]}" echo "${#ARRAY[@]}"
実行結果
789 123 456 789 3
その他
permission deniedのとき
基本的にはsudoコマンドを前に付ければ管理者権限で実行できます。
$ sudo echo "XXXX" > data.txt
ライブラリの書き換えなどでうまくいかないときはchownで所有者を変更します。
$ sudo chown $USER data.txt
ディレクトリ以下を再帰的に変更することもできます。(複数のユーザーで使用しているときは注意が必要です)
$ sudo chown -R $USER datadirectory/
あるいはls -axlなどで権限を確認しつつ、chmodで権限の変更をします。
$ ls -axl drwxr-xr-x 2 root staff 68 11 13 10:11 workspace $ sudo chmod g+w workspace/ $ ls -axl drwxrwxr-x 2 root staff 68 11 13 10:11 workspace
動作中のプロセスを確認したいとき
ps -axlを使用すると、動作中のプロセスリストを確認することができます。
また、topを使用するとリアルタイムでの確認ができます。
実行コマンドの場所を知りたいとき
whichを使用すると、コマンド実行している場所を出力することができます。デバッグやインストール、バージョン等の切り替えのために同じファイルがいくつもあってどれで動いているか分からなくなったときに有効です。
$ which mrcInfo /Eos/bin/mrcInfo $ which ruby /Eos/util/X86MAC64/bin/ruby $ which pione /usr/local/bin/pione
pwdによる注意事項
pwdは現在のディレクトリ名を出力するコマンドですが、リンク先のディレクトリで実行するとリンクとしてのディレクトリ名となり、実体のディレクトリ名を得られません。実体のディレクトリ名を得たい場合はオプション-Pを使用します。Eosディレクトリ内では多くのリンクを使用していますので注意が必要です。
/objects$ pwd /Eos/objects /objects$ pwd -P /Eos/optional/objects
また、リンク先を出力したい場合にはreadlinkを使用します。こちらはリンクファイル名で指定して下さい。ディレクトリ名やリンク先のファイルなどでは出力されません。
/Eos$ readlink objects optional/objects