複数の変数を連結したい場合は,変数名を続けて記述する。たとえば,str1とstr2という変数の内容をつないでresult_strに代入したい場合は, $ srt1="Nikkei " $ str2="Linux" $ result_str=$str1$str2 ← 変数を繋げる $ echo $result_str Nikkei Linux
配列(連想配列) 初期化 ARR[0]=1 ARR[1]=2 ARR[2]=3 または ARR=(1 2 3) コマンドの結果を配列に格納する files=($(ls /tmp/)) 1つの要素を参照 echo ${ARR[0]} # => 1 echo ${ARR[1]} # => 2 echo ${ARR[2]} # => 3 全要素を参照 echo ${ARR[@]} # => 1 2 3 for a in ${ARR[@]}; do echo $a # => 1(2,3,...) done 配列の大きさ size=${#ARR[@]} # n = 3 ループの中で初期化 for i in 1 2 3; do n=${#ARR[@]} ARR[$n]=$i done echo ${ARR[@]} # => 1 2 3 配列に要素を追加(push) ARR1=(1 2 3) ARR1=
Categories no use(51) midiom(74) computer(42) sound(74) life(71) ruby(4) Discography UNiTiES 2009 HUMAN 2005 行数カウントシェルスクリプト メモ。 #!/usr/bin/bash TOTALCOUNT=0 for FILENAME in `/bin/find ./trunk/source -name "*.cpp"` do COUNT=`wc -l $FILENAME | cut -d' ' -f1` TOTALCOUNT=`expr $TOTALCOUNT + $COUNT` echo $FILENAME done echo $TOTAL Lines midiomHost まだ、2万行はいっていない感じ。 ヘッダーにも結構実装が混じっているから不確定だけ
Bashで必要なデータ構造の覚書です。 目次 配列 配列を生成する。 配列にデータを追加する。 配列にデータを格納する。 配列からデータを取得する。 配列中のすべてのデータに同じ処理をする。 関連記事 配列 配列は複数件のデータを扱うためのデータ構造です。 ■配列を生成する。 配列の生成は以下のように行います。 配列の名前=() 配列の名前=("データ" "データ" "データ")配列の生成では、配列の名前を指定します。 もし、生成時にデータを格納する場合に、()内にデータを指定します。 例えば、空の配列ARRAY1を生成するには、以下のように書きます。 ARRAY1=()例をもう一つ。データを3つ格納した配列ARRAY2を生成するには、以下のように書きます。 ARRAY2=("history" "japanese" "math") ■配列にデータを追加する。 配列へのデータの追加は以下のよ
#!/usr/bin/sh GYOU=`ps -ef | grep slapd | grep -v grep | wc -l` LOG=/home/user/slapd-error.log if [ $GYOU -ge 1 ]; then echo "OK" else /usr/local/libexec/slapd echo `date` >> $LOG --- slapd-error echo "NG" fi ※これをcronで5分に一度ぐらい動かしておきます ■■■解説■■■ #!/usr/bin/sh GYOU=`ps -ef | grep slapd | grep -v grep | wc -l` # 次の3つのコマンドをパイプで渡していったものです #ps -ef | grep slapd slapdプロセスを検索 #grep -v grep その検索の中でgrepという文字の
grepは素晴らしいテキスト検索ツールだ。grepを使えば、ファイルに含まれているテキストでも、あるコマンドが出力したテキストでも、テキストであるものはすべて検索することが可能だ。また、grepでは単純な文字列のほかに正規表現を用いた検索もできるほか、利便性を考慮してさまざまな出力形式が用意されている。 たとえば、sshdが動作しているかどうかを調べるには、次のように調べるだろう。 $ ps ax | grep sshd この例では、パイプを用いてps axの出力をgrepの入力に接続しており、文字列sshdに一致する行がすべて出力される。この場合、grepはもちろん自分自身のプロセスも同じように出力してしまう。そこで、grepをもう一度実行し、文字列grepが含まれていないものを出力するようにしよう。 $ ps ax | grep sshd | grep -v grep -vオプションを
シェルは「キーボードから入力し,画面に出力する」ようになっている。こうした入力と出力の方法を変更する場合には,リダイレクトを使う。たとえば,入力をファイルから行い,出力は捨ててしまう(画面への表示もファイルへの保存もしない)ということが可能だ。 リダイレクトには出力先を切り替える「>」,出力先のファイルに追加する「>>」,入力元を切り替える「<」,複数行の入力を行える「<<」がある。 出力先や入力先の指定方法には,ファイル・ディスクリプタと呼ぶ数字を用いる。たとえば,特定のファイルへのアクセスをファイル・ディスクリプタの5に割り当てるといった具合だ。 ファイル・ディスクリプタの0,1,2はシェルで予約されている。 「0」は標準入力と呼ばれ,シェルにどのように入力するかを指定できる。通常はキーボードからの入力になっている。 「1」は標準出力と呼ばれ,シェルの結果をどこに出力するかを指定できる
2つの顔を持つソフトウェア:シェル ステップ・バイ・ステップ・シェルスクリプト(1) この連載では、シェルスクリプトで実用的なプログラムを組むことを目標にして、シェルの基本的な知識を説明していきます
のように実行してもよい。-xオプションにより、コマンドの実行状況が標準エラー出力に出力される。 例として、以下のシェルスクリプト(backup.sh)を作成する。 #!/bin/sh TIME=`date +%y%m%d` while [ $# -gt 0 ] do cp -r $1 $1.$TIME shift done$ /bin/sh -x backup.sh gterm-error01.png sample.pdf ++ date +%y%m%d + TIME=050824 + '[' 2 -gt 0 ']' + cp -r gterm-error01.png gterm-error01.png.050824 + shift + '[' 1 -gt 0 ']' + cp -r sample.pdf sample.pdf.050824 + shift + '[' 0 -gt 0 ']
シェルスクリプトをデバッグするにはで説明したデバッグ方法は、シェルスクリプト内のすべての実行状況が出力される。そのため、長いシェルスクリプトでは出力される情報が膨大になり、問題の個所を調べるのに時間がかかる。そこで、調べたい部分だけ実行状況を出力する方法を紹介する。 シェルスクリプトの一部分だけをデバッグするには、その部分を以下のように「set -x」と「set +x」で囲む。 #!/bin/sh デバッグが必要ない部分 set -x ←実行状況の出力を開始 デバッグが必要な部分 set +x ←実行状況の出力を終了 デバッグが必要ない部分
ネットワークに接続されていないPCで、MOやFDなどのメディアに入り切らないサイズのデータを持ち出すときは、ファイルを分割して複数のメディアにコピーするしかない。 Linuxでファイルを分割するには、splitコマンドを使用する。その際に、よく利用するオプションは-bだ。-bオプションは、指定したバイト数でファイルを分割する。例えば、以下のように-b 1000とすると、1000bytesずつのファイルができることになる。-bオプションでは、単位を省略するとbytesになるが、-b 100kのように「k」を付けるとKbytes単位に、-b 1mのように「m」を付けるとMbytes単位で分割される。 $ ls -l total 8 -rw-rw-r-- 1 nori nori 5929 Aug 5 15:48 sophos1.png $ split -b 1000
「ファイルを分割するには」では、splitコマンドでファイルを分割する方法を説明した。 splitコマンドでは、ファイルサイズや行数などを指定してファイルを分割するが、任意の文字列によって分割することはできない。ここでは、任意の文字列によってテキストファイルを分割する方法を説明する。 テキストファイルを任意の文字列で分割する場合は、csplitコマンドを利用する。例えば、章単位(行頭に「第x章」という文字がある場合)でsample.docというファイルを分割する場合、以下のコマンドを実行すればいい。 $ cat sample.doc 第1章 これは、第1章の文章です。 第2章 これは、第2章の文章です。 第3章 これは、第3章の文章です。 第4章 これは、第4章の文章です。 第5章 これは、第5章の文章です。 $ csplit sample.doc /^第[1-9]章/ {*} コマンドの
書式 serialtime=`date "+%s"` serialtime=$(($serialtime-(86400*3))) 説明 3日前の日付の値が指定されたディレクトリ(例:20041201)を削除するには現在のシリアル値(秒数)を求め、そこから3日分のシリアル値(秒数)を減算します。そのシリアル値を引数としてdateコマンドに渡します。その結果得られた文字列をrmコマンドに渡して指定したパスにあるディレクトリを削除します。(川西建設http://windage.aerospace.jp/~knks/で教えてもらいました) サンプルコード #!/bin/bash serialtime=`date "+%s"` serialtime=$(($serialtime-(86400*3))) now=`date -r $serialtime "+%Y%m%d"` rm -fr "/User
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く