web-dev-qa-db-ja.com

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

私はbashスクリプトプログラミングが初めてです。

入力として1つの文字列引数(名前)を受け入れるbashスクリプト 'deploymLog'を実装したいと思います。

[root@localhost Desktop]# ./deploymLog.sh name

ここでコマンドラインから文字列引数(名前)を渡したい

最初のステップとして、現在のタイムスタンプをこの入力文字列と共にログファイルに追加する必要があります。たとえば、次の形式で現在のディレクトリにLogone.txtを追加します。

[name]=[System time timestamp1]

どのように可能ですか?

121
chinchu
$> 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
_

(ログファイルは指定した形式とは異なります。各行の先頭にタイムスタンプが付いた、より適切な形式です)。

66
trojanfoe
#!/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
7
Dyno Fu