2023年8月2日发(作者:)
linuxshwhile嵌套,linuxshellawk流程控制语句(if,for,whi。。。在linux awk的 while、do-while和for语句中允许使⽤break,continue语句来控制流程⾛向,也允许使⽤exit这样的语句来退出。break中断当前正在执⾏的循环并跳到循环外执⾏下⼀条语句。if 是流程选择⽤法。 awk中,流程控制语句,语法结构,与c语⾔类型。下⾯是各个语句⽤法。⼀.条件判断语句(if)复制代码代码如下:if(表达式) #if ( Variable in Array )语句1else语句2格式中"语句1"可以是多个语句,如果你为了⽅便Unix awk判断也⽅便你⾃已阅读,你最好将多个语句⽤{}括起来。Unix awk分枝结构允许嵌套,其格式为:复制代码代码如下:if(表达式){语句1}else if(表达式){语句2}else{语句3}复制代码代码如下:[chengmo@localhost nginx]# awk 'BEGIN{test=100;if(test>90){print "very good";}else if(test>60){print "good";}else{print "no pass";}}'very good每条命令语句后⾯可以⽤“;”号结尾。⼆.循环语句(while,for,do)语句格式:while(表达式){语句}例⼦:复制代码代码如下:[chengmo@localhost nginx]# awk 'BEGIN{test=100;total=0;while(i<=test){total+=i;i++;}print total;}' 循环for循环有两种格式:格式1:for(变量 in 数组){语句}例⼦:复制代码代码如下:[chengmo@localhost nginx]# awk 'BEGIN{for(k in ENVIRON){print k"="ENVIRON[k];}}'AWKPATH=.:/usr/share/awkOLDPWD=/home/web97SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassSELINUX_LEVEL_REQUESTED=SELINUX_ROLE_REQUESTED=LANG=zh_2312。。。。。。说明:ENVIRON 是awk常量,是⼦典型数组。格式2:for(变量;条件;表达式){语句}例⼦:复制代码代码如下:[chengmo@localhost nginx]# awk 'BEGIN{total=0;for(i=0;i<=100;i++){total+=i;}print total;}'循环格式:do{语句}while(条件)例⼦:复制代码代码如下:[chengmo@localhost nginx]# awk 'BEGIN{total=0;i=0;do{total+=i;i++;}while(i<=100)print total;}'5050以上为awk流程控制语句,从语法上⾯⼤家可以看到,与c语⾔是⼀样的。有了这些语句,其实很多shell程序都可以交给awk,⽽且性能是⾮常快的。break当 break 语句⽤于 while 或for 语句时,导致退出程序循环。continue当 continue 语句⽤于 while 或for 语句时,使程序循环移动到下⼀个迭代。next能能够导致读⼊下⼀个输⼊⾏,并返回到脚本的顶部。这可以避免对当前输⼊⾏执⾏其他的操作过程。exit语句使主输⼊循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应⽤exit语句,则终⽌脚本的执⾏。三、性能⽐较[chengmo@localhost nginx]# time (awk 'BEGIN{ total=0;for(i=0;i<=10000;i++){total+=i;}print total;}')50005000real 0m0.003suser 0m0.003ssys 0m0.000s[chengmo@localhost nginx]# time(total=0;for i in $(seq 10000);do total=$(($total+i));done;echo $total;)50005000real 0m0.141suser 0m0.125ssys 0m0.008s实现相同功能,可以看到awk实现的性能是shell的50倍!
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690917487a463064.html
评论列表(0条)