쉘 스크립트에 전달된 모든 매개변수가 파일인지 확인하는 방법은 무엇입니까? $@
매개변수와 -f
명령문을 사용해 보았습니다 if
.
답변1
테스트 여부모두매개변수는 파일이므로 매개변수 중 하나가 파일인지 테스트하는 것이 더 쉽습니다.아니요문서 1개:
for argument do
if [ ! -f "$argument" ]; then
printf 'Not a file: %s\n' "$argument" >&2
exit 1
fi
done
echo 'All arguments are files'
이는 모든 위치 매개변수를 반복하고 각각을 차례로 테스트합니다. 파일이 아닌 것이 발견되면 오류가 인쇄되고 코드가 종료됩니다.
모든 매개변수를 조사하려면 다음을 수행하십시오.
for argument do
if [ -f "$argument" ]; then
printf 'Is a file: %s\n' "$argument"
else
printf 'Is not a file: %s\n' "$argument"
fi
done
이는 모든 위치 매개변수를 반복하고 각각 테스트하여 테스트 결과를 인쇄합니다.
참고 "파일입니다"실제로이는 "일반 파일이거나 일반 파일에 대한 심볼릭 링크"를 의미합니다. 일반 파일에 대한 심볼릭 링크가 아닌지 확인하려면 다음을 사용하십시오.
if [ ! -f "$argument" ] || [ -L "$argument" ]; then
첫 번째 루프의 테스트로 또는
if [ -f "$argument" ] && [ ! -L "$argument" ]; then
두 번째 루프의 테스트입니다.
루프의 첫 번째 줄은 다음과 같이 쓸 수도 있습니다.
for argument in "$@"; do
...하지만 사람들은 큰따옴표를 잊어버리는 경향이 있고 $@
어쨌든 상단의 루프는 더 짧습니다.