• sedの正規表現
  • 実行ユーザがあるグループに属しているか。
    id -nG | awk '{ for(i = 1; i <= NF; i = i + 1) if($i ~ /^wheel$/) print $0 }'
    
  • awk
  • 無限ループ
    while :
    do
      # cmd
      #  :
    done
    
  • シェルの特殊変数
    • $0
      • シェルスクリプト名
    • $1,...,$9
      • 引数
    • "$@"
      • "$1" "$2" ...
    • $*
      • $1 $2 ...
    • $#
      • 引数の数
    • $$
      • プロセスID
    • $?
      • 終了ステータス
    • $!
      • 最後に実行したバックグラウンドプロセスのプロセスID
  • { ls /var && echo reachable } && echo success  
    { ls /notfound && echo unreachable } || echo fail          
    
  • dig
  • ShellScript?
    リダイレクト
    	cmd1 2>&1 | cmd2
    
    range loop
    	i=0; while [ $i -lt 100 ]; do
    		echo $i
    		i=$(expr $i + 1)
    	done
    
    パスワード確認
    	while :
    	do
    		echo "main db reader user passwd:"
    		stty -echo
    		read DB_READER_PASSWD
    		stty echo
    
    		echo "main db reader user passwd(please retype):"
    		stty -echo
    		read DB_READER_PASSWD2
    		stty echo
    
    		[ $DB_READER_PASSWD = $DB_READER_PASSWD2 ] && break
    	done
    
    環境変数
    	export
    	unset
    
    シェル内で実行
    	(...)
    	. source-file
    
    UNIXは-文化
    
    ps
    	ps (){
    		ps aux | grep $1 | grep -v grep
    	}
    
    シンボリックリンクの解決
    	realpath(){
    		if [ -L $1 ]; then
    			return $(stat -c %N $1 | awk '{print $3}' | sed -e "s:[\`]::" -e "s:.$::")
    		else
    			return $1
    		fi
    	}
    
    sed
    	sed -i 対象のファイル -e "コマンド" -e "コマンド"
    
    自身のパスを取得する
    	# resolve simbolic link
    	if [ -L $0 ]; then
    		SELF=$(stat -c %N $0 | awk '{print $3}' | sed -e "s:[\`]::" -e "s:.$::")
    	else
    		SELF=$0
    	fi
    	SELF_DIR=$(cd $(dirname $SELF);pwd)
    	BASE_DIR=$(cd $SELF_DIR/../;pwd)
    
    test
    	test num1 -eq num2					num1 = num2
    	test num1 -ne num2					num1 != num2
    	test num1 -lt num2					num1 < num2
    	test num1 -le num2					num1 <= num2
    	test num1 -gt num2					num1 > num2
    	test num1 -ge num2					num1 >= num2
    
    	test str1 = str2					str1 == str2
    	test str1 != str2					str1 != str2
    	test -z str							0 == len(str)
    	test -n str							0 < len(str)
    
    	test file1 -nt file2				file1.time > file2.time
    	test file1 -ot file2				file1.time < file2.time
    	test -d file						isdir(file)
    	test -f file						isfile(file)
    	test -s file						0 < size(file)
    	test -e file						isexist(file)
    	test -r file						isreadable(file)
    	test -w file						iswritable(file)
    	test -x file						isexecutable(file)
    	test -L file						islink(file)
    
    	test exp1 -a exp2					exp1 and exp2
    	test exp1 -o exp2					exp1 or exp2
    	test \( exp1 -o exp2 \) -a exp3		(exp1 or exp2) and exp3
    
    	[ ! -e file ] で否定
    
    	http://www.geocities.jp/geo_sunisland/if_and_test.html
    
    リファレンス
    	[http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html シェルスクリプト(Bash)]
    
  • 時刻設定
  • サブシェル
    (
      cd tmp
      touch test
    )
    
    • 末尾は&&でつながなくてもいいが、つないでおけばエラーで中断する。
  • statはBSDとGNUで引数が違う
  • zshで環境変数を設定するのはexport、削除するにはunset
  • 株式会社 アドバンスソフト - PukiWiki : /etc/profile.d
  • cygwin
    • 入れるもの
      • chere
        • 指定のフォルダをカレントディレクトリとしてcygwinを開く機能をエクスプローラーに追加できる
      • diffutils
        • sshdを立てるのに必要
      • make
        • よく使う
      • openssh
        • ssdを立てるのに必要
      • subversion
        • よく使う
      • zsh
        • よく使う
  • ディレクトリはMakeのターゲットにできない
  • Makefileの中で$をつかいたいときは$$とエスケープ
  • zshの$~の環境変数展開は\でエスケープできる
  • makeのコマンドでcdしたいときは以下の行を; \でつなぐ
  • ディレクトリのpermissionで、xはディレクトリのファイルのリストを取得する権限に当たる。xがない場合、ディレクトリ内のファイルへアクセスすることができなくなる気がする。
  • 教えて!goo シェルスクリプト内のcdで、カレントディレクトリを変えるには?
    • 先頭に.をつける。
  • ディレクトリを丸ごと移動
  • ファイル検索
    find ディレクトリ -name "検索するファイル名"
    
    • nameの後に=はいらない
    • Permission Deniedとかがうるさいときは
      find ディレクトリ -name "検索するファイル名" 2> /dev/null
      
  • viを使い倒そう
  • killで死なないコマンドを殺す
    kill -KILL pid
    
  • @IT:Linux起動の仕組みを理解しよう[rcスクリプト編]
  • SYONテクニカル: 「daemontools」を利用したサービス監視
  • 再帰的にchmodする
    • chmod -R 666 *