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

提供: Eospedia
移動: 案内検索
行205: 行205:
 
$ which pione
 
$ which pione
 
/usr/local/bin/pione
 
/usr/local/bin/pione
 +
</pre>
 +
<br>
 +
 +
=== pwdによる注意事項 ===
 +
pwdは現在のディレクトリ名を出力するコマンドですが、リンク先のディレクトリで実行すると相対パスとしてのディレクトリ名となります。リンク先のディレクトリ名を絶対パスで得たい場合はオプション-Pを使用します。Eosディレクトリ内では多くのリンクを使用していますので注意が必要です。<br>
 +
<pre>
 +
/objects$ pwd
 +
/Eos/objects
 +
/objects$ pwd -P
 +
/Eos/optional/objects
 +
</pre>
 +
<br>
 +
 +
また、リンク先を出力したい場合にはreadlinkを使用します。<br>
 +
<pre>
 +
/Eos$ readlink objects
 +
optional/objects
 
</pre>
 
</pre>
 
<br>
 
<br>

2014年11月26日 (水) 02:28時点における版

 ここではコマンド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