안녕하세요, UNIX 및 Linux 사용자 여러분. Bash 스크립트에 작성한 일부 코드에 대해 질문이 있습니다. 내 프로그램은 다음을 수행해야 합니다.
사용자로부터 두 개의 문자열을 읽는 스크립트를 작성하십시오. 이 스크립트는 두 문자열에 대해 세 가지 작업을 수행합니다.
(1) 테스트 명령을 사용하여 한 문자열의 길이가 0인지, 다른 문자열의 길이가 0이 아닌지 확인하고 두 가지 결과를 사용자에게 알려줍니다. (2) 각 문자열의 길이를 결정하고 어느 것이 더 긴지 또는 길이가 같은지 사용자에게 알려줍니다. (3) 문자열이 같은지 비교합니다. 사용자에게 결과를 알려주세요.
6 #(1) Use the test command to see if one of the strings is of zero length and if the other is
7 #of non-zero length, telling the user of both results.
8 #(2) Determine the length of each string and tell the user which is longer or if they are of
9 #equal length.
10 #(3) Compare the strings to see if they are the same. Let the user know the result.
11
12 echo -n "Hello user, please enter String 1:"
13 read string1
14 echo -n "Hello User, please enter String 2:"
15 read string2
16
17 myLen1=${#string1} #saves length of string1 into the variable myLen1
18 myLen2=${#string2} #saves length of string2 into the variable myLen2
19
20 if [ -z $string1 ] || [ -z $string2 ]; then
21 echo "one of the strings is of zero length"
22
23 else
24 echo "Length of The first inputted string is: $myLen1"
25 echo "Length of The second inputted string is: $myLen2"
26
27 fi
28
29 if [ $myLen1 -gt $myLen2 ]; then #Determine if string1 is of greater length than string2
30 echo "The First input string has a greater text length than the Second input string."
31 exit 1
32 elif [ $myLen2 -gt $myLen1 ]; then #Determine if String2 is of greater length than String1
33 echo "The second string has a greater text length than the First string."
34 exit 1
35 elif [ $myLen1 -eq $myLen2 ]; then #Determine if the strings have equal length
36 echo "The two strings have the exact same length."
37 exit 1
38 fi
내 스크립트는 다음 오류를 수신합니다. (그렇지 않으면 예상대로 작동합니다.)
./advnacedlab4.sh: line 20: [: too many arguments
./advnacedlab4.sh: line 20: [: too many arguments
당신의 의견을 알려주십시오. 감사해요!
답변1
Jasonwryan이 지적했듯이 테스트 중인 문자열의 공백으로부터 자신을 보호해야 합니다. 변수가 확장될 때 여전히 단일 단위로 처리되도록 변수 주위에 따옴표를 넣거나 대신 이러한 확장을 처리하는 데 더 똑똑하지만 이식성이 뛰어난 연산자를 사용할 수 있습니다 [[
.[
그렇지 않고 공백이 있는 경우 다음 string1
과 string2
같은 표현식을 얻습니다.
string1="string one"
if [ -z string one ] ...
따라서 2개의 문자열 "string"과 "one"을 전달하고 -z
하나의 매개변수만 사용합니다.