私はbashスクリプトプログラミングが初めてです。
入力として1つの文字列引数(名前)を受け入れるbashスクリプト 'deploymLog'を実装したいと思います。
[root@localhost Desktop]# ./deploymLog.sh name
ここでコマンドラインから文字列引数(名前)を渡したい
最初のステップとして、現在のタイムスタンプをこの入力文字列と共にログファイルに追加する必要があります。たとえば、次の形式で現在のディレクトリにLogone.txt
を追加します。
[name]=[System time timestamp1]
どのように可能ですか?
$> cat ./deploymLog.sh
#!/bin/bash
name=$1
log_file="Logone.txt"
if [[ -n "$name" ]]; then
echo "$1=$( date +%s )" >> ${log_file}
else
echo "argument error"
fi
コマンドラインからの最初の引数は、位置パラメータ$1
で見つけることができます。 [[ -n "$name" ]]
は、$name
が空でないかどうかをテストします。 date +%s
は、現在のタイムスタンプをUnix時間で返します。 >>
演算子は、ファイル内の既存のデータに追加してファイルに書き込むために使用されます。
$> ./deploymLog.sh tt
$> cat Logone.txt
tt=1329810941
$> ./deploymLog.sh rr
$> cat Logone.txt
tt=1329810941
rr=1329810953
タイムスタンプを読みやすくするには、date
引数を使用します。
シェルコマンドライン引数には_$1
_(最初)、_$n
_(n番目)、または_$*
_(すべての引数)からアクセスできるため、スクリプトを開始する必要があります。
_#!/bin/bash
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
_
これで、name引数に_$name
_としてスクリプトからアクセスできます。
タイムスタンプを取得するには、date(1)
コマンドを使用してフォーマット指定子を指定し、必要なフォーマットを生成します。
_now=$(date +%Y%m%d%H%M%S)
_
現在、_$now
_には現在の日付と時刻が含まれています。
したがって、次のようにログファイルを作成できます。
_logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile
_
シェル関数を使用してメッセージをログに記録する方が簡単です。
_function logit
{
now=$(date +%Y%m%d%H%M%S)
echo "$now: $*" >> $logfile
}
_
シェル関数は、スクリプトと同じように(_$1
_などを介して)独自の引数にアクセスすることに注意してください。
したがって、最初のスクリプトは次のようになります。
_#!/bin/bash
function logit
{
now=$(date +%Y%m%d%H%M%S)
echo "$now: $*" >> $logfile
}
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
now=$(date +%Y%m%d%H%M%S)
logfile=/path/to/log/file/mylogfile.$now
logit name = $name
_
(ログファイルは指定した形式とは異なります。各行の先頭にタイムスタンプが付いた、より適切な形式です)。
#!/bin/bash
name=$1
echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log
「bash deploymLog.sh何でも」を実行すると、x.logが
20120220-23:53:50 => whatever