저는 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