「よく使うシェルコマンド」の版間の差分

提供: Eospedia
移動: 案内検索
(pwdによる注意事項)
(if文)
行10: 行10:
 
<br>
 
<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時点における版

 ここではコマンドMakefilePIONEなどの作成や実行においてよく使うシェルコマンドを簡易的にリストアップしています。

制御文

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