fmemo
BASH
最終更新:
Bot(ページ名リンク)
-
view
シェル変数への値の代入
以下の例では変数VARに値grapeを代入し、それをechoで出力させている。代入のときは$はいらない。参照するときは$をつける。イコールの前後には空白を入れないこと。
$ VAR=grape $ echo $VAR grape
特殊変数
$0
実行中のファイル名が代入される
$1 $2 $3 ...
引数が代入される。
$#
引数の数が代入されるされる。
$*
すべての引数が代入されている。区切り文字はIFSで指定できる(デフォルトはスペース)
$@
すべての引数が代入されている。区切り文字はスペース。IFSに影響されない。
$$
プロセスID
参考サイト
特定のコマンドを一定間隔で実行したい
例えば、Hello Worldと標準出力に表示させるのを5秒間隔でおこないたいときは以下のようにする。停止させたいときはCtrl-Cでとめる。
$while true ; do echo "Hello World"; sleep 5; done
ファイルの中身を読み込む
$less list_test a b c d e f g h less echo_test.sh #!/bin/sh while read VAR1 VAR2 VAR3 VAR4; do echo $VAR1 $VAR2 $VAR3 $VAR4 #ここに処理内容を書く done $./echo_test < list_test #リダイレクトでリストを渡す。 a b c d e f g h
unixコマンドなどの出力結果を変数に代入する
コマンドをバッククォートで囲む
#!/bin/sh VAR=`date` #コマンドdateの出力結果を変数VARに代入 echo $VAR #変数VARを表示
配列
$ var=(a b c) $ echo ${var[0]} a
配列は0からナンバリングされることに注意する。
if文
if [ 条件 ] ; then .... elif [ 条件 ] ; then .... else .... fi
- 注意事項: [や]の前後にはスペースを入れること
for文
#!/bin/bash for file in *.txt do echo $file; done
#!/bin/bash for fruit in apple baana cherry do echo $fruit done
forを使った一行野郎(ワンライナ)
$ for i in *.tar.gz ; do tar xvzf $i ; done
連番の数字を出力させたいとき
$ echo {1..10} 1 2 3 4 5 6 7 8 9 10
これとfor文を組み合わせると便利
while文
while [ 条件 ] do .... done
#!/bin/bash a=1; while [ $a -le 5 ] do echo $a a=$(($a+1)) done
変数の加減乗除
exprを使う
#!/bin/sh NUM=`expr 3 + 2` #バッククォートを使ってexprコマンドの出力結果をNUMに代入 echo $NUM
history
過去に入力したコマンドの一覧を表示。
$ history
過去に入力したコマンドのうちで、文字列abcを含むものを表示。
$ history | grep abc
過去に入力したコマンドで番号が10番のものを実行。
$ !10
過去に入力したコマンドでabcで始まる最新のコマンドを実行。
$ !abc
標準出力をファイルに書き出す
- 新規にファイルを作り、そこに書き込むときには「>」
- 既存のファイルに追記するときは「>>」
- Cシェルだと標準エラーだけをファイルに書き出すことができない。
.bashrc
複数のセッションでhistoryを共有する
function share_history { history -a history -c history -r } PROMPT_COMMAND='share_history' shopt -u histappend
簡単なコマンドは履歴から消去する
for CMD in ls cd pwd who exit clear [[gnuplot]] do cat ~/.bash_history | grep -v ^$CMD$ > ~/.bash_history_tmp mv ~/.bash_history_tmp ~/.bash_history done