私は初めてbashスクリプトに触れました。
文字列パラメータ(名前)を入力として受け入れるbashスクリプト "deploymLog"を実装したいと思います。
[root@localhost Desktop]# ./deploymLog.sh name
ここでは、コマンドラインを介して文字列パラメータ(名前)を渡したいと思います。
Logone.txt
最初のステップとして、この入力文字列と共に現在のタイムスタンプを次の形式で現在のディレクトリのログファイルに追加する必要があります。
[name]=[System time timestamp1]
それはどのように可能ですか?
答え1
$> 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
。
答え2
シェルのコマンドライン引数は、$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
(ログファイルの形式は指定した形式とは異なります。形式が良く、各行の先頭にタイムスタンプがあります。)
答え3
#!/bin/bash
name=$1
echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log
「bashdeploymLog.shwhatever」を実行すると、x.logが表示されます。
20120220-23:53:50 => whatever