You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
ログファイルを空にしたいときなど、いつも忘れるので・・・。 : > file % : > file これが一番シンプルですね。 : という区切りのコマンドがあり、それを file にリダイレクトしてあげるとファイルが空になります。man bash には以下のように記述されています。おそらくzshでは一番シンプルです。 ・・・ A : separates the event specification from the word designator. ・・・ ・ ・ ・ SHELL BUILTIN COMMANDS Unless otherwise noted, each builtin command documented in this section as accepting options preceded by - accepts -- to signify the end of
シェル変数の末尾の文字を削除する シェルスクリプトを書く際、変数の末尾についた余分な記号を取りたいとき、以下のように行っていた(以下、"bananapencilbook"という文字列から"book"を削除する)。OSはCentOS、シェルはbashです。 $ echo ${testvar} bananapencilbook $ echo ${testvar} | sed -e 's/book$//g' bananapencil 上の方法は末尾の文字列以外にも適用できるので楽なのだが、他に何かないか探していたところ、 同じことが以下のようにできるらしい。 $ echo ${testvar%book} bananapencil %以下の文字列に後方一致するものを削除するという機能なのだが、他にも便利な記法があるようで、 以下にまとまっている。 qiita.com あるものは使いましょう。とりあ
クォートの種類 シェルスクリプトではクォートによって囲まれた中身の処理がそれぞれ異なります。 そこで、クォートごとの処理内容についてまとめてみました。 シングルクォート 「'」 内容を文字列として出力 ダブルクォート 「"」 変数の内容を文字列として出力 バッククォート 「`」 コマンドとして実行して結果を出力 シングルクォート 囲んだ中身をすべて文字列として使用したい場合に「'」シングルクォートを使用します。 シングルクォートで囲った場合は、たとえ中に変数があったとしても中身を展開することなく変数がそのまま文字列として処理されてしまします。 では、実際にシェルスクリプトを作成して実行してみます。 #!/bin/bash STRINGS='Hello World.' echo '$STRINGS' 変数「STRINGS」に「Hello World.」という文字列を格納してechoで表示
bash ではいろいろな条件で分岐が出来る。 ifで使えるいろいろな条件を見てみたいと思う。 数値判断系 数字を比較するときは以下を覚えておけばいい。 (( 1 > 0 )) (( 1 >= 0 )) (( 1 < 0 )) (( 1 <= 0 )) (( 1 == 0 )) (( 1 != 0 )) (( 0 )) # 終了ステータス 1 /if では false (( 1 )) # 終了ステータス0 /if ではtrue (( ! 0 )) # 終了ステータス 0 /if では true (( 1 && 1 )) (( 0 ||1 )) 数値を比較するときは if (( 1!=0 )) ; then echo yes ; fi と書きます。この数値判断系の出来ることはlet と全く同じです。 (( ))のdouble parensis での記述方法は また別記事もっと詳細に書きます。
あるフリーウェアのインストール用bashプログラムを見ていたら次の様なものがあった。(以下の例は簡略化してある。) STRING="abc" if [[ "$STRING" =~ "^ab[cd]$" ]]; then echo "matched" else echo "unmatched" fi if文の条件表現の中に“=~”というオペレータがある。manを見ると =~ オペレータは文字列を正規表現と比較するとある。知らなかった。bashの文字列比較で正規表現が使えるとは。私は正規表現比較が必要な時はgrepに喰わせて判断していたのだが、これを使えば簡単にできる。 ところが、だ。上のプログラムが期待通りに動かない。上の例では =~ の左辺と右辺の正規表現はマッチするはずだが、結果は“unmatched”。色々と正規表現を変えてみたが、どれとしてマッチングしない。しかし、if文を次のように
シェルスクリプトのif文で文字列の辞書順の大小関係を条件判定したかったので調べました bashなどには[[]]コマンドがあるので、簡単に文字列比較ができます(ところで[[]]って検索しづらいですね [](test)コマンドの方でも文字列の大小比較はできますが、以下のように>や<をエスケープする必要があります(手元で試したらbashでは動いてzshでは動かなかった) [ string1 \< string2 ] [ string1 \> string2 ][[]]を使うと以下のように自然に書くことができます [[ string1 = string2 ]] [[ string1 == string2 ]] [[ string1 != string2 ]] [[ string1 < string2 ]] [[ string1 > string2 ]]久しぶりに書くと[]の内側や演算子の周りに空白
🐚 🐚 🐚 🐚 シェルスクリプトは遅すぎて使えない 普通の「速い言語」より何百、いや、何千倍も遅い 他のプログラミング言語を経験してからシェルスクリプトに入門し、このような感想を持つ方も多いのではないでしょうか。 実際、こういったことは往々にして起こり得ますので、「速い言語」を使うべきか否か見極めることは大事だと思います。 しかし、本当にシェルスクリプトというのは、そこまで遅いのでしょうか? データ量が多い場合は常に最初から「速い言語」で書いた方がよいのでしょうか? 実は、そうとも限りません。 シェルスクリプトにはシェルスクリプトなりの「速い書き方」があります。 この「速い書き方」で処理できる問題に関しては、シェルスクリプトは「速い言語」なのです。 では、「速い書き方」とは何かというと、端的には「たくさん繰り返されるループはシェルスクリプトで記述しない」ことです。 以下でこれを説明
シェル (bash) の配列について使い方をまとめてみました。 配列を生成する 配列を生成する場合は配列名=(値1 値2 値3)と記述します。値を指定しなかった場合は空の配列が作成されます。 $ arr=() # 空の配列 $ arr=("first" "second" "third") $ echo "${arr[@]}" first second third declare -a 配列名コマンドを使うことで明示的に宣言することもできます。 $ declare -a arr=("first" "second" "third") $ echo "${arr[@]}" first second third 配列名[インデックス]=値という記法が使われた場合も配列が生成されます。 $ arr[0]="first" $ arr[1]="second" $ arr[2]="third" $ ech
#!/bin/sh # 二重起動チェック if [ $$ != `pgrep -fo $0` ]; then echo "Already running!" >&2 exit 9 fi # メイン処理 echo "[`date '+%Y/%m/%d %T'`] Sleep 10 seconds..." sleep 10 exit 0 $$ は、自分自身のプロセスID。 $0 は、自分自身のプロセス名(相対パス)。 pgrep -fo $0 は、自分自身のプロセスIDを取得。 メリット・デメリットについて メリットは、cron 実行しないのであればこれで充分である。 デメリットは、cron で実行された場合にチェックが効かない。 理由は、pgrep -fo $0 が cron で実行した際のプロセスIDとなってしまう(子プロセス($0)のプロセスIDにならない)ため。 2. 作成例(その2)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く