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" ]]있지 않은지 테스트하십시오 $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

관련 정보