忍者ブログ

ゆるいSEの小ネタ集

ゆるキャラ好きのITエンジニアが書くTips。 ゆるキャラ命なSEのIT徒然草 https://itmagic.hatenablog.com/

Bシェル

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Bシェル

--------------------------------------------------
◆基本文法
--------------------------------------------------
□if
  【構文】
  if [ (変数) (式) (条件) ];then
   処理
  fi
   ※[と]の内側にはスペースを入れること。
  【記述例】
  ①基本的なif文(数値の判定)
   if [ $AAA_FLG -eq 1 ];then
    echo ok
   fi
  ②複数条件の判定がある場合(elif,else)
   if [ $AAA_FLG -eq 0 ];then
    echo aaa
   elif [ $AAA_FLG -eq 2 ];then
    echo bbb
   else
    echo ccc
   fi
  ③文字列の判定
   $EMP_NM=ishida
   if [ $EMP_NM = 'ishida' ];then
    echo ok
   fi
   ※シングルクォートで囲むことで確実に文字列と判別される。
  ④ファイルの存在チェック
   if [ -f test.sh ];then
    echo test.sh exists.
   fi
   ※オプション -f:ファイルが存在すれば真   -d:ディレクトリが存在すれば真  -e:存在すれば真
  ⑤否定
   if [ ! -f test.sh ];then
    echo test.sh not exists.
   fi
  ⑥or and
   or   if [ -f test.sh || -d test.sh ];then
   and  if [ -f test.sh && -d test.sh ];then
□case
  【記述例】
  case ${AAA_FLG} in
   aaa*) echo aaaa;;
   bbb*) echo bbb;;
   1*) echo ahoahoi;;
   *) echo error!;;
  esac
□for
  【構文】
  for 変数 in 値1 値2…
  【記述例】
  ①findの結果を使用してforループをまわす
   for bkupFile in `find ${bkup_dir} -type f -name "*.tar.gz"`
   do
    echo "abc"$bkupFile
   done
   →findの結果をbkupFileアタマに"abc"をつけて出力
□while
  条件がtrueである限り処理を実行する
  【構文】
  while [条件]
  do
   処理
  done
  【記述例】
  ①変数の値が7から1までechoを実行する
   cnt=7
   while [ $cnt -ge 1 ]
   do
    cnt=`expr $cnt - 1`
    echo $cnt
   done
  ②findの結果を変数にセットして、findの結果分処理を実行する (下記例:findでヒットしたファイルの中身を全てクリアする)
   while read i ;do
    echo "null copy ${i}"
    cp /dev/null "${i}"
   done <<EOF
   `find . -type f`
□until


■条件文の書き方
ifやwhile分などで使用できる条件文の文法は以下のとおり。
  ・文字列評価
   string1 = string2   両者が同じ
   string1 != string2   上の反対
  ・数値評価
   num1 -gt num2     num1 > num2
   num1 -ge num2     num1 >= num2
   num1 -eq num2     num1 = num2
   num1 -le num2     num1 <= num2
   num1 -lt num2     num1 <num2<br>
   num1 -ne num2     num1 not = num2
  ・ファイル検査
   -r file        file 読み込み可
   -w file        file 書き込み可
   -x file        file 実行可
   -e file        file 存在
   -s file        file が空でない
   -d file        file はディレクトリ
   -f file        file は通常のファイル


■標準出力/エラー出力のリダイレクト
STDOUTのリダイレクト> file
STDOUTの追加リダイレクト>> file
STDERRのリダイレクト2> file
STDERRの追加リダイレクト2>> file
STDOUTとSTDERRのリダイレクト> file 2>&1
STDOUTとSTDERRの追加リダイレクト>> file 2>&1
STDOUTとSTDERRをパイプを通してコマンドに渡す2>&1 | command
STDOUTとSTDERRを別々のファイルにリダイレクト> file1 2> file2
STDOUTとSTDERRを別々のファイルに追加リダイレクト>> file1 2>> file2
【記述例】
①エラー出力を破棄する (/dev/nullにリダイレクトすることで出力を無視できる)
  find / -name hoge 2>/dev/null
②標準出力とエラー出力を別々にログ出力する。
  find / -name hoge >> test.log 2>> err.log


--------------------------------------------------
◆サンプルコード
--------------------------------------------------
■無限ループ
while true
do
ntpdate [hostname]
sleep 5
done


■参考資料
http://www.sci.hokudai.ac.jp/~inaz/doc/B/Education/node15.html
http://hp.vector.co.jp/authors/VA012953/unix/cs_frame.html
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
ゆるキャラ命
性別:
非公開

P R