2013-07-03 3 views
0

저는 현재 리눅스 수업을 듣고 있습니다. 나는 많은 것을 혼자서 배워야한다. 필자는 인수를 기반으로 날짜 형식을 만들기 위해이 스크립트를 작성했습니다. 즉 (./script.sh one). 이 스크립트로 문제를 해결하는 데 문제가 있습니다. 나는 내가 틀린 것을 가지고 있다고 생각한다. 어떤 도움이라도 대단히 감사하겠습니다. 다음은 스크립트입니다.Bash 스크립팅 인수

#!/bin/bash 


if [ $1="one" ] 
    then 
     date +%m-%d-%y 

elif [ $2="two" ] 
    then 
     date +%d-%m-%y 

elif [ $3="three" ] 
    then 
     date +%A,%B-%d,%Y 

elif [ $4="four" ] 
    then 
     date +%s 
elif [ $5="five" ] 
    then 

fi 

답변

3

쉘 스크립트는 대단히 공백 문자입니다. 등호 앞뒤에 공백이 있어야합니다. 또한 완전히 비어있는 if 문을 사용할 수 없습니다. 거기에 적어도 하나의 진술이 있어야합니다. 아무 것도 없으면 null 문에 대한 일반적인 관용구 인 :을 작성하십시오. 내가 추측하고

if [ $1 = "one" ]; then 
    date +%m-%d-%y 
elif [ $2 = "two" ]; then 
    date +%d-%m-%y 
elif [ $3 = "three" ]; then 
    date +%A,%B-%d,%Y 
elif [ $4 = "four" ]; then 
    date +%s 
elif [ $5 = "five" ]; then 
    : 
fi 

당신은 또한 즉, 첫 번째 인자가 무엇인지 확인, 모든 검사하지 $1$5을 통해를 $1을 사용할 수 있습니다. 그렇다면 ifcase으로 바꿀 수 있습니다.

case $1 in 
    one) date +%m-%d-%y;; 
    two) date +%d-%m-%y;; 
    three) date +%A,%B-%d,%Y;; 
    four) date +%s;; 
    five) ;; 
esac 
+0

존, 도움에 너무 감사합니다. 그냥 또 다른 질문입니다. 나는 "fi"가 대본을 끝내 었다고 생각했기 때문에 왜 "fi"앞에 :를 써야합니까? 내가 왜 "FI"전에 null 문을 만들 필요가 있는지 모르겠다. –

+0

@JamesCook':'은 빠진'date' 명령을 의미합니다. ':'는 아무것도하지 않는 명령입니다. 'then'다음에 명령이 있어야하는데'then' 다음에는'fi'가 바로 올 수 없습니다. 그것은 구문 적 요구 사항입니다. –

+0

하단 스크립트가 훨씬 쉽습니다! 도와 주신 John에게 정말 고마워요. –