下面是我要制作的shell脚本的摘录,它应该允许 用户提供他们想要查看的文件,脚本打印第一行 每个文件并询问是否要删除它们。我已经标记了错误的位置,我知道我正在使用$不正确。
任何帮助将不胜感激 谢谢:))
count=1
while [ $# -ge $count ]
do
head $"$count"//error here
echo -e "Delete file $$count?? (y/n):"//error here
read answer
case $answer in
Y|y)rm $"$count"//error here
echo -e "File $$count deleted\n" ;;//error here
N|n)echo -e "File $$count NOT deleted\n" ;;//error here
*)echo "Invalid Command";;
esac
count=`expr $count + 1`
done
答案 0 :(得分:2)
在这种情况下使用位置参数是愚蠢的,因为你不关心这个位置;只是关于它的实际价值。使用bash的$@
数组:
for file in "$@"; do
head "$file";
read -p "Delete file \"$file\"? (Y/N) " answer;
case "$answer" in
Y|y) rm -v "$file";;
N|n) echo "File \"$file\" was not deleted.";;
*) echo 'Invalid command';;
esac;
done;
$1
和shift
搞乱。read
的提示,而不是第一次echo
。答案 1 :(得分:1)
你可以这样做:
# loop till you have filenames
while [ $# -ge 1 ]
do
# display the first 10 lines for 1st file.
head $1
echo -e "Delete file $1?? (y/n):"
read answer
case $answer in
Y|y)rm $1
echo -e "File $1 deleted\n" ;;
N|n)echo -e "File $1 NOT deleted\n" ;;
*)echo "Invalid Command";;
esac
# shift the parameters.
# you loose 1st argument, 2nd argument becomes 1st
# $# is decremented.
shift
done
答案 2 :(得分:0)
你似乎要做的事情被称为“间接”。您可以使用它来访问位置参数,但最好使用shift
或使用janmoesen's answer中的for file
。
以下是间接如何工作:
#!/bin/bash
count=1
while (( count <= $# ))
do
echo "${!count}"
((count++))
done
您可以在脚本中“$$ count”的位置使用${!count}
。
顺便说一句,正如您在我的示例中所看到的,没有必要使用expr
来增加变量。