파일 크기가 9999바이트 미만인지 확인해 보려고 하는데 여기서 왜 깨지는지 모르겠습니다.
if compgen -G "$jdir0/"*.srt
then
for f in "$jdir0"/*.srt
do
jsubtitle="$(basename $f)"
filesize=$(du -b "$jdir0/$jsubtitle" | cut -f1)
if [ "$filesize" -lt 9999 ] then
echo "less"
fi #line 443
if [ $filesize -gt 10000 ] then......etc,etc...
**line 443: syntax error near unexpected token `fi'**
$filesize 변수를 확인했는데 공백 없이 숫자만 포함되어 있습니다. 또한 if 문에서 변수 $filesize(및 9999) 주위에 ""가 없도록 시도했습니다. 나는 또한 double [[을 테스트했지만 아무것도 테스트하지 않았습니다.
이 is 문은 "for f in.." 루프 내의 다른 if 문 안에 있지만 이것이 영향을 미쳐서는 안 됩니까?
답변1
내 생각에 당신의 문제는 당신이 then
조건과 같은 선상에 있다는 것입니다. 다음 줄에 있거나 세미콜론이 앞에 와야 합니다.
해결책:
if [ "$filesize" -lt 9999 ]; then
답변2
if 문은 then
한 줄에 있거나 앞에 다음이 와야 합니다 ;
.
if [ "$filesize" -lt 9999 ]; then
echo "less"
fi
답변3
존재하다:
if [ "$filesize" -lt 9999 ] then
echo "less"
fi
목록을 끝내는 키워드 가 아닌 then
명령에 추가 인수로 전달됩니다 .[
then
조건부 명령내부에:
if
condition-commands
then
then-commands
〚elif
more-condition-commands
then
more-then-commands〛
〚else
else-commands〛
fi
성명.
[
이 명령을 다음과 같이 덜 특이한 이름을 가진 다른 간단한 명령으로 바꾸면 더 분명해집니다 echo
.
if echo whatever then
echo "less"
fi
then
쉘이 echo
또는 같은 간단한 명령에 대한 인수에서 키워드를 키워드로 처리하지 않더라도 키워드를 식별하는 stackexchange의 구문 강조에 속지 마십시오 [
. 다음 상황에서도 동일한 작업이 수행된다는 것을 알 수 있습니다.
echo then
[ then = alors ]
첫 번째 것이 fi
필요하기 때문에 이것은 예상치 못한 일입니다. then
이는 then
어떤 방식으로든 정의되어야 합니다. 그래서:
if [ "$filesize" -lt 9999 ]; then
echo "less"
fi
또는:
if [ "$filesize" -lt 9999 ]
then echo "less"
fi
기술적으로 말하자면,
if [ "$filesize" -lt 9999 ] & then
echo "less"
fi
if ([ "$filesize" -lt 9999 ]) then
echo "less"
fi
구문론적 관점에서도 작동 bash
하지만 동일하지는 않습니다. 첫 번째는 [
백그라운드에서 명령을 실행하고(백그라운드에서 성공적으로 시작되었는지 테스트하는 중입니다), 두 번째는 하위 쉘에서 명령을 실행합니다.