스크립팅의 기본 사항을 배우면서 다음 코드 줄이 있습니다.
#!/bin/sh
if [ $# -ne 1]
then
echo "Please provide one directory to search"
echo "Example usage: something.sh directory_name"
exit 1
fi
하지만 이 명령을 실행하면 오류가 발생합니다. if: Expression Syntax.
여기서 누락된 부분은 무엇입니까? 다음 if 문에서도 같은 오류가 발생했습니다. (변수가 디렉터리인지 확인하고 싶었습니다.
if [ !-d $1 ]
then
echo "$1: Invalid Directory. Aborting Script."
exit 1
fi
도움이 될 경우 전체 스크립트:
#!/bin/sh
if [ $# -ne 1 ]
then
echo "Please provide one directory to search"
echo "Example usage: something directory_name"
exit 1
fi
if [ ! -d $1 ]
then
echo "$1: Invalid Directory. Aborting Script."
exit 1
fi
cd "$1"
read=0
write=0
exe=0
numFiles=0
numDir=0
for filename in *
do
if [ -r filename ]
then
`expr $read + 1`
fi
if [ -x filename ]
then
`expr $exe + 1`
fi
if [ -w filename ]
then
`expr $write + 1`
fi
if [ -f filename ]
then
`expr $numFiles + 1`
fi
done
for dir in */
do
if [ -r dir ]
then
`expr $read + 1`
fi
if [ -x dir ]
then
`expr $exe + 1`
fi
if [ -w dir ]
then
`expr $write + 1`
fi
if [ -d dir ]
then
`expr $numDir + 1`
fi
done
total=`expr $numDir + $numFiles`
echo "In the directory $1"
echo " Number of directories : $numDir"
echo " Number of files : $numFiles"
echo " Number of readable items : $read"
echo " Number of writable : $write"
echo " Number of executable items: $exe"
echo "-------------------------------"
echo "Total number of items: $total"
업데이트: 누구든지 이 문제를 우연히 발견할 경우를 대비해 #!/bin/bash
if 표현식을 발생시키는 오류 앞에 헤더 주석이 있습니다.
답변1
질문이 많습니다. 이것은 작동하는 버전입니다. 변수의 값을 나타내려면 $를 사용해야 하며( $filename
대신 ) 표현식을 단순히 호출 하는 filename
것이 아니라 표현식의 결과를 변수에 할당해야 합니다 .read=expr $read + 1
expr $read + 1
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Please provide one directory to search"
echo "Example usage: assignment4.sh directory_name"
exit 1
fi
if [ ! -d "$1" ]
then
echo "$1: Invalid Directory. Aborting Script."
exit 1
fi
cd "$1"
read=0
write=0
exe=0
numFiles=0
numDir=0
for filename in *
do
if [ -r "$filename" ]
then
read=`expr $read + 1`
fi
if [ -x filename ]
then
exe=`expr $exe + 1`
fi
if [ -w "$filename" ]
then
write=`expr $write + 1`
fi
if [ -f "$filename" ]
then
numFiles=`expr $numFiles + 1`
fi
done
for dir in */
do
if [ -r "$dir" ]
then
read=`expr $read + 1`
fi
if [ -x "$dir" ]
then
exe=`expr $exe + 1`
fi
if [ -w "$dir" ]
then
write=`expr $write + 1`
fi
if [ -d "$dir" ]
then
numDir=`expr $numDir + 1`
fi
done
total=`expr $numDir + $numFiles`
echo "In the directory $1"
echo " Number of directories : $numDir"
echo " Number of files : $numFiles"
echo " Number of readable items : $read"
echo " Number of writable : $write"
echo " Number of executable items: $exe"
echo "-------------------------------"
echo "Total number of items: $total"
$ ./script.sh
Please provide one directory to search
Example usage: something.sh directory_name
$ ./script.sh /home/username
In the directory /home/username
Number of directories : 8
Number of files : 104
Number of readable items : 120
Number of writable : 120
Number of executable items: 8
-------------------------------
Total number of items: 112
답변2
당신이 놓친 것은 공백입니다.
이것은 작동합니다:
if [ $# -ne 1 ]
then
echo "One argument needed"
exit 1
fi
비슷하게:
if [ ! -d $1 ]