1.shell中的until与 "$@"一起使用,shift的作用
function until_test() {
until [ -z "$2" ];do
echo $2
shift
done
}
until_test a b c d ef
image.png
上面的那段shell脚本看字面的意思就是从第二个参数开始,通过until循环,直到$2参数为空。$2在这段代码中没有明显的改动的地方,看起来是一个不变的值,那不是要无限死循环?其实关键点在"shift"
shift:位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1
shift 命令还有另外一个重要用途, Bsh 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。
shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。
当然你也可以自己设置一个计数器,但是个人觉得有点low
function for_test() {
count=1;
for i in $@;
do
if [ $count -gt 2 ];then
echo $i;
fi;
count=$((count+1));
done;
}
第二点 awk 中的"~" 用来做正则匹配
比如:
awk -F ":" '{if($1 ~/nihao/){print $0}}' testfile
主要使用来匹配第一项为"nihao"的一行
当然。你可能会说干嘛不用"=="呢, 因为"~"可以匹配正则表达式
网友评论