bashスクリプトにコマンドライン引数を渡す

bashスクリプトにコマンドライン引数を渡す

私は初めて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" ]]ないことをテストしてください$namedate +%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

関連情報