이것은 매우 간단한 스크립트입니다
#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo "Please insert at least one argument"
exit
else
echo -e "\c"
fi
if [ -h "$1" ]
then
echo "$1 is a symbolic link"
else
echo "$1 in not a symbolic link"
fi
~
내 질문은 : 하나 이상의 인수를 인식하기 위해 스크립트를 변경하는 방법은 무엇입니까? 4 개의 파일이 있고 스크립트를 반환하고 싶습니다.
$1 is a symbolic link
$2 is not a symbolic link
$3 is not a symbolic link
기타
어떻게해야합니까?
답변
원래 스크립트와 동일한 구조를 사용하면 $@
배열 을 반복해야합니다 (명령 행에 제공된 인수 목록).
#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo "Please insert at least one argument"
exit
else
echo -e "\c"
fi
for file in "$@"
do
if [ -h "$file" ]
then
echo "$file is a symbolic link"
else
echo "$file is not a symbolic link"
fi
done
같은 것의 단순화 된 버전은 다음과 같습니다.
#!/usr/bin/env bash
[ "$#" -lt 1 ] && printf "Please give at least one argument\n" && exit
for file
do
[ -h "$file" ] && printf "%s is a symbolic link\n" "$file" ||
printf "%s is not a symbolic link\n" "$file"
done
답변
시프트에 대해 언급 한 사람이 없습니까?
if [ x = "x$1" ] ; then
echo need at least one file
exit 1
fi
while [ x != "x$1" ] ; do
if [ -h "$1" ]; then
echo "$1 is a symbolic link"
else
echo "$1 is not a symbolic link"
fi
shift
done
답변
for 루프 를 사용 하여 스크립트에 전달 된 모든 파일을 처리 할 수 있습니다 .
for f do
if [ -h "$f" ]; then
printf "%s is a symbolic link\n" "$f"
else
printf "%s is not a symbolic link\n" "$f"
fi
done
답변
다른 shift
:
: "${1?USAGE: "$0" files...}"
while [ "$#" -gt 0 ]
do [ -h "$1" ]
printf "'%s' is %.$((!$?*4))s%s\n" \
"$1" "not " "a symbolic link."
shift; done