本文主要介绍shell中for循环用法的详细说明。通过示例代码非常详细,对大家的学习或者工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。
for 命令:
for i在中的各种用法:
对于“文件1”“文件2”“文件3”中的I
对于i in /boot/*
对于/etc/*中的I。会议
对于I在$(seq-w 10)-01-10中的等宽
对于{1…10}年的I
对于I,单位为美元(ls)
以美元为单位(文件)
「$ @」中的For i会接受所有位置参数,可缩写为for I。
注意:bash shell支持C类型的for循环
#!/bin/bash
j=1美元
for((I=1;I=j;我))
做
触摸文件$i回显文件$i正常
完成的
$ @:所有位置变量的内容
$ #:位置变量的数量
$0:文件名
$ *:所有位置变量的内容
剧本写作注意事项:
指定开始使用什么shell,例如:bash、ksh、csh等。
脚本功能描述、用法、作者、版本、日期等。
变量名和函数名应该有实际意义。函数名应该是动名词形式,第二个单词的第一个字母应该大写。示例:updateConfig()
缩进4个空格,而不是制表符。
对变量值使用大括号,例如{ varname }
删除文件时,如果路径中有变量,则判断变量有值,如rm -f ${abc}/*如果变量abc没有值,则根目录中的文件将被删除。
尽量不要用cd来改变脚本中的目录。
功能也要有功能描述,使用规律,版本,日期等。
功能要单一,不要太复杂。
$()比```好。
尽量不要使用多层if语句,而是使用case语句。
如果需要执行一定数量的循环,应该用for语句替换while语句。
输入参数要判断正确。
添加更多注释,以便自己或他人阅读。
练习1:编写一个脚本来清除所有arp缓存记录:
#!/bin/bash
对于I in $(ARP | tail-n ^ 2 | tr-s ' ' | cut-d ' '-f1)
做
arp -d $i
完成的
练习2:生成十个随机数:
方法1:
对于{ 0 }中的I.9};do echo $ RANDOM完成的
方法二:
以美元为单位的I(序列10);do echo $ RANDOM完成的
练习3:倒数五秒:
#!/bin/bash
“回声”准备倒计时5秒
对于以美元表示的I(序号5 -1 1)
做
echo-en ' $ I ';睡眠1
完成的
Echo -e' Go
方法二:
#!/bin/bash
“回声”准备倒计时5秒
对于以美元表示的I(序号5 -1 1)
做
echo-en ' \ b $ I ';睡眠1
完成的
echo-e ' b开始'
练习4:批量添加用户:
#!/bin/bash
对于I in $ (cat/root/users.txt)-"从列表文件中读取文件名。
做
useradd $i
echo ' 123456“| passwd-stdin $ I-”指定通过管道的密码字符串
完成的
练习:
查找uid大于10000的用户,然后删除它们。必须使用for循环。
#/bin/bash
u _ uid=(` cat/etc/passwd | awk-F:' { print $ 3 } ' `)
u _ name=(` cat/etc/passwd | awk-F:' { print $ 1 } ' `)
对于“seq ${#u_uid[@] }”中的I
做
if (( ${u_uid[i-1]} 10000))
然后
userdel-r $ { u _ name[I-1]} echo ' $ { u _ name[I-1]}删除成功'
船方不负担装货费用
完成的
方法2:通过正则化找出大于10000的用户:
cat/etc/passwd | egrep " 1[0-9]{ 4 } |[2-9]{ 5,} "
示例:根据ip地址检查网络中幸存的主机ip。
Break语句:(跳出循环)
在for、while、until等循环语句中。用于跳出当前循环体,执行循环体后的语句。
Continue语句:(跳出这个循环)
在循环语句中,如for、while、until等。用于跳出循环体中剩余的语句,重新判断条件,以便执行下一个循环。
练习:使用for循环批量添加用户。
#!/bin/bash
对于I in $ (cat/root/users.txt)-"从列表文件中读取文件名。
做
useradd $i
Echo "123456" | passwd $ i-stdin-"指定通过管道的密码UNAME
完成的
(ps:判断用户是否存在:id命令)
位置变量
位置变量:$n,但是大于9的位置参数应该用{}: ${10}括起来
position的作用:其实就是把参数传入脚本。
$0-"表示脚本本身的名称。
(位置变量最常见的用法:bash 1.sh variable 1 variable 2…)
预定义变量:
$ #:命令行中位置变量的数量
$ *:所有位置变量的内容(较少使用)
$ @:所有位置变量的内容
$0:当前正在执行的进程/程序的名称
:当前shell的PID值,echo
:当前shell的PID值,echo
;Ps $$,通常用作临时变量的后缀
$?执行最后一个命令后返回的状态。当返回的状态值为0时,执行正常;当值不为0时,执行异常或错误。
$RANDOM:随机数,可以用作临时文件名
例:输出一个0-9内的随机数—“-”回声$((RANDOM))”
输出1-10内的随机数—“-”回声$((RANDOM 1))”
!$:表示上一个命令的参数
!执行最后一个命令。
练习:输出
1美元是aa,
2美元是bb,
3美元是cc,
4美元是dd,
5美元是ee
回答:
#!/bin/bash
echo '此脚本中有$#个参数'
N=1-“变量n用于计数
因为我在$@
做
echo \ $ $ N是$i
((N))
完成的
PS:
Ping命令
-c 1—“只ping一次。
-I 0.2-“第一包和第二包之间的间隔为0.2s
-W 2-"仅等待2s
示例:
ping 172.30.132.123 /dev/null
重定向ping命令没用,成功执行了$?如果不成功,返回0或1。
根据IP地址检查网络中幸存的主机IP(全面扫描)
#!/bin/bash
对于192.168.1中的r。{1.254}
做
ping -c1 -w1 '${ip}' /dev/null
完成的
ARP-n | grep ether | tr-s ' ' | cut-d ' '-f1
关于ping命令的经典脚本:
对于{ 1 }中的I.193}
做
(平-c1 -i0.2 -w1 172.16.30。$i /dev/null
如果(($?==0 ))
然后
回声172.16.30。$i up' 2.txt
其他
回声172.16.30。$i down' 3.txt
Fi) -“这段放在后台执行,大大加快了速度。
完成的
睡眠2
live_pc_num=`cat 2.txt|wc -l '
down_pc_num=`cat 3.txt|wc -l '
echo“有$down_pc_num已关闭”
echo“有$live_pc_num已启动”
回显'列表:'
cat 2.txt
rm -rf 2.txt 3.txt
break 语句
典型的while循环:
#!/bin/bash
i=1
While: -":等价为真
做
回显' $i '
((一))
睡眠0.3
完成的
注意:这是一个无限循环,会一直进行下去。
使用break,您可以跳出循环:
#!/bin/bash
i=1
同时:
做
回显' $i '
((一))
If ((I==20000))-"仅输出1-19999。
然后
破裂
船方不负担装货费用
完成的
总结
突破:跳出整个循环
退出:跳出脚本
继续:跳出这个循环,然后执行下一个循环。
案例练习9:
批量添加用户,并满足以下要求:
回答:
#!/bin/bash
Read -p '请输入您用户名的前缀:' a
Read -p '请输入用户数量:' num
if (( $num=10))
然后
n=0
对于“序列$num”中的I
做
如果用户添加$a$i /dev/null
然后
Echo '用户$a$i已成功创建!'
((n))
echo ' 123456 ' | passwd $ a $ I-stdin/dev/null
船方不负担装货费用
完成的
Echo '创建的用户总数:$n '
其他
Echo '您最多只能创建10个用户!'
船方不负担装货费用
关于for循环在shell中的详细使用,本文到此结束。更多关于shell for loop的相关内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。