Debian 시스템에서 다음 코드를 실행하고 있습니다.
for File in "${Files[@]}"; do
if test "`find $FolderDownload/$File -cmin -190`" ; then
echo "File is new then 3 hours"
# Set concatenation
FileConcat=1
# Get out ot next step
break
else
echo "There's no change in the $File in past 6 hours"
fi
done
FreeBSD 시스템에서 기본 csh와 함께 사용하는 방법은 무엇입니까?
실제로 나는 노력하고 있습니다 :
foreach File ($Files)
if (test find $FolderDownload/$File -cmin -190) then
echo "File is new then 3 hours"
# Set concatenation
FileConcat=1
# Get out ot next step
break
else
echo "There's no change in the $File in past 6 hours"
endif
end
하지만 오류가 반환됩니다.
if: Expression Syntax.
변수의 내용은 다음과 같습니다.
파일 = {"File1.txt","File2.txt","File3.txt","File4.txt"}
폴더 다운로드="/var/scripts/"
파일 연결 = 0
답변1
귀하는 귀하의 의견에 다음 사항을 알고 있다고 표시했습니다.
- 배시를 설치하는 방법.
- 루트의 기본 쉘을 변경하지 마십시오.
- Bash는 /bin에 설치되지 않으므로 단일 사용자 모드에서 직접 사용할 수 없습니다.
- 의 사용자입니다.
위의 모든 내용은 정확하고 귀하에게 좋습니다!
작은 오해, 중요하지 않습니다. toor 사용자는 이 목적을 위해 만들어졌습니다. uid는 0(루트와 동일)이므로 원하는 쉘을 설정할 수 있습니다.토르.
더 큰 오해는 대부분의 FreeBSD 스크립트가 (t)csh를 사용하여 작성된다는 것입니다. 그들은 그렇지 않습니다! 시스템 스크립트는 sh로 작성됩니다. 살펴보시 /bin/freebsd-version
거나/usr/bin/zdiff
Bash는 FreeBSD 운영 체제의 일부가 아닙니다. 그러나 설치해서 사용하면 시스템이 불순해지지 않습니다. 사용자 셸을 변경할 필요조차 없습니다. 하지만 그렇다면 뿌리에 손을 대지 마십시오.
그러나 더 큰 문제가 있습니다.
csh에 스크립트를 작성하지 마세요!
기본 루트 셸이 (t)csh라고 하더라도 어떤 시스템에서도 csh 스크립트를 작성해서는 안 됩니다. 이것은 꽤 일반적인 합의입니다. 전체 내용을 보려면 다음을 읽어보세요.유해한 것으로 간주되는 CSH 프로그래밍
셰르본
스크립트를 작성할 때마다 첫 번째 줄은 "shebang"으로 시작해야 합니다(자세한 내용은바쉬셰본). 이는 스크립트를 실행할 때 사용할 인터프리터를 시스템에 알려줍니다. csh에서 bash(또는 perl/zsh/etc) 스크립트를 문제 없이 실행할 수 있습니다.
최적의 이식성을 위해 다음을 수행하십시오.
#!/usr/bin/env bash
$PATH를 통해 bash의 위치를 찾습니다. 나에게는 이것이 최고의 솔루션입니다.
다른 사람들은 절대 이렇게 해서는 안 되며 대신 정확한 위치를 지정해야 한다고 주장합니다. 그런 다음 대상 시스템에 요구 사항이 추가됩니다. shebang shen move 스크립트를 업데이트하거나 대상 시스템의 /bin에 bash에 대한 링크가 있는지 확인하십시오.
광범위한 이식성을 위해 sh 사용
더 나은 이식성을 원한다면 스크립트에 sh 쉘을 사용하십시오. bash보다 기능이 적지만 모든 POSIX(유사) 시스템에서 작동할 것이라고 확신할 수 있습니다.
쉘 스크립팅은 어렵다!
올바른 쉘 스크립트를 작성하는 것은 매우 어려울 수 있습니다. 당신을 도울 수 있는 첫 번째이자 최고의 도구는 다음과 같습니다.주택 검사. 당신은 그것을 설치할 수 있습니다현지의게다가.
스크립트를 확인하는 습관을 들이십시오. 그러면 많은 문제를 줄일 수 있습니다.