「よく使うシェルコマンド」の版間の差分
(→if文) |
(→制御文) |
||
行82: | 行82: | ||
</tr> | </tr> | ||
</table> | </table> | ||
+ | <br> | ||
+ | |||
+ | === case文 === | ||
<br> | <br> | ||
2015年1月27日 (火) 08:30時点における版
ここではコマンド、Makefile、PIONEなどの作成や実行においてよく使うシェルコマンドを簡易的にリストアップしています。
目次
コマンドの出力結果
$()を使うことにより、シェルコマンドの出力結果を変数へ代入したり、別のコマンドの引数として使用したりすることができます。
変数代入
str=$(echo "XXX") echo "$str+1"
実行結果
XXX+1
文字列strへechoの結果が保存されさらに別のコマンドに使用することができます。
別コマンドへの引き渡し
touch $(pwd)/XXX.txt
上記のように記述すれば直接利用することもできます。
制御文
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 exist." fi |
! | 条件の反転 | if [ ! -e Input.txt ] ; then echo "Input.txt is not exist." fi |
-d | ディレクトリの有無を調べる | if [ -d Input.txt ] ; then echo "Input is not directory." fi |
case文
ループ文
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