bash

bash 配列

estis2014/10/07 (火) 21:55 に投稿

代入

$ array=(1 2 3 4)

値確認

変数名だけだと、インデックス[0]の呼び出し
$ echo $array
1
インデックスを付けて各要素を呼び出す
$ echo ${array[0]}
1
$ echo ${array[1]}
2
$ echo ${array[2]}
3
$ echo ${array[3]}
4
値がないものは、「ない」
$ echo ${array[4]}

{}でくくり忘れるとこうなる
$ echo $array[3]
1[3]
全要素出力
$ echo ${array[@]}
1 2 3 4
要素数?
$ echo ${#array[@]}
4
$ echo ${#array}
1

値代入

インデックスを指定しないと、インデックス[0]への代入
$ array=2
$ echo $array
2
$ echo ${array[0]}
2
$ echo ${array[@]}
2 2 3 4
インデックスを指定して値代入
$ array[1]=5

bash for ループ

estis2014/10/07 (火) 20:58 に投稿
$ for i in 1 2 3 4
> do
> echo $i
> done
1
2
3
4
$ for i in {1..4}
> do
> echo $i
> done
1
2
3
4
$ for ((i=1; i do
> echo $i
> done
1
2
3
4
$ for i in $(seq 1 4)
> do
> echo $i
> done
1
2
3
4
$ array=(1 2 3 4); for i in "${array[@]}"
> do
> echo $i
> done
1
2
3
4

bash 複数行の入力を標準出力から受け付け、ファイルへ書き込む

estis2014/06/18 (水) 00:43 に投稿
# cat test01 
#!/bin/sh

FILE="tmp"

echo "Input"
read -d ' ' LIST
for i in $( echo $LIST)
do
    echo $i
done > $FILE

# ./test01 
Input
1
2
3
4
5
6
7
8
9

# cat tmp
1
2
3
4
5
6
7
8
9

「 」(半角スペース)入力までを読み込む。(read のデフォルトは1行読み込み。-d で変更している)
./tmp ファイルへ書き込み。

Apache エラーログのエラー種類毎に件数をまとめたいので

estis2014/03/12 (水) 23:34 に投稿

Apache エラーログの種類毎に件数をまとめたいのだが、エラーの種類を全て網羅したかどうかがわからない。
それを何とかしたかったので、bash(と一部awk)で強引にスクリプトを作った。

#!/bin/sh

MYIFS=$IFS
IFS="
"

ERROR_LIST=error.list
TARGET_FILE=$1
WHILE_CHK=1

errors_extract(){
	true
	# Apacheエラーログからエラー内容のみを抽出
}

new_pattern(){
	echo -n "*** Not use / *** Input New Pattern: "
        read PATTERN
        echo $PATTERN >> $ERROR_LIST
}

error_chk(){
	for i in $(cat $TARGET_FILE)
	do
		echo 0 > match_chk 
		echo 0 > Not_match_chk 
		for j in $(cat $ERROR_LIST)
		do

入力短縮 bash

estis2009/03/20 (金) 14:42 に投稿

$ bash --version
GNU bash, version 3.2.17(1)-release (powerpc-apple-darwin9.0)
Copyright (C) 2005 Free Software Foundation, Inc.
で確認。

最後のコマンドの繰り返し
  !!

  直前のコマンドの再実行。一旦実行されるコマンドが表示され、その後実行される。

直前のコマンドの置換え
  !!:s/【置換元文字列】/【置換先文字列】/

  例
  ls /home/user01/public_html
  〜〜〜
  !!:s/1/2/
  ls /home/user02/public_html
  〜〜〜

  次の方法でも同じ事ができる。