当前位置: 首页 > news >正文

Linux shell编程 循环语句for continue break

for循环是编程语言中一种循环语句

示例1:循环读取user.txt中的用户名,创建用户。设置密码。

for i in $(cat /opt/user.txt)
douseradd $iecho 123456 | passwd --stdin $i
done

 

示例2:循环读取ipaddr文本文件中地址,执行ping命令,获取结果。根据执行结果将存货的主机地址和不存活的主机地址区分写入两个文件

[root@xue opt]# cat pingtofile.sh
for i in $(cat /opt/ipaddr.txt)
do
ping -c 3 -W 2 $i &> /dev/null 
#-c 3 ping3次    -W 2 等待时间2s    &> /dev/null报错信息导入空设备不显示
if [ $? == 0 ]
then echo $i >> /opt/ipservive.txt
else echo $i >> /opt/ipdie.txt
fi
done

 

 

示例3         从1累加到100

sum=0
for i in {1..100}
dosum=$(($i+$sum))
done
echo $sum

 

常用转义字符

echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上  

echo -ne 


只有加了-e才能执行下面的转义符:
\b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n 换行,被输出的字符从"\n"处开始另起一行。 
\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v 与\f相同;

\t 转以后表示插入tab,即横向制表符;

\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\\ 表示插入"\"本身;

使用转义字符-n实现不换行效果

echo "-n不换行"
for i in {1..9}
doecho -n "*"
doneechoecho "普通输出换行"
for i in {1..9}
doecho "*"
done

 

 

使用嵌套for循环搭配转义字符-n输出正三角

for i in {1..9} #外循环,实现行输出
dofor ((j=1;j<=i;j++)) #内循环,实现列输出doecho -n "*"#每列不换行输出*,输出多少个*取决于上面的j循环(输出个数与行数相关)done
echo    #此echo为外循环每行换行使用
done

 

 

改进正三角,结合-ne 输出九九乘法表

 

for i in {1..9} #外循环,实现行输出
dofor ((j=1;j<=i;j++)) #内循环,实现列输出doecho -ne "$i*$j=$(($i*$j))\t"
#-ne:n不换行输出,-e:为了使用转义符\t。\t:制表符 由于分隔输出done
echo    #此echo为外循环每行换行使用
done

 

跳出for循环:continue与break

continue跳出循环,循环内部跳过本次循环并继续下一次循环

break打破循环,直接跳出循环不再执行

 

continue 2表示跳出2层循环

continue 3表示跳出3层循环

continue 4表示跳出4层循环

continue 5表示跳出5层循环

不写数字默认为1,continue 1跳出当前循环

break写法同理。

 

[root@xue opt]# cat continue.sh
#直接跳过1层当前循环
echo "continue"
for a in {1..5}
dofor b in {1..5}doif [ $b -eq 3 ]thencontinuefiecho -ne "a=$a-b=$b\t\t"done
echo
doneecho
echo
echo
#直接跳过2层循环
echo "continue 2"
for a in {1..5}
dofor b in {1..5}doif [ $b -eq 3 ]thencontinue 2fiecho -ne "a=$a-b=$b\t\t"done
echo
doneecho
echo
echo
#直接破除1层当前循环
echo "break"
for a in {1..5}
dofor b in {1..5}doif [ $b -eq 3 ]thenbreakfiecho -ne "a=$a-b=$b\t\t"done
echo
doneecho
echo
echo
#直接破除2层循环
echo "break 2"
for a in {1..5}
dofor b in {1..5}doif [ $b -eq 3 ]thenbreak 2fiecho -ne "a=$a-b=$b\t\t"done
echo
done

http://www.lryc.cn/news/63478.html

相关文章:

  • leetcode 643. 子数组最大平均数 I
  • TDA4VM/VH 芯片硬件 mailbox
  • 如何利用Trimble RealWorks三维激光扫描仪进行外业测量和内业处理?
  • mysql数据备份
  • 排队接水--贪心
  • 数字温度传感器-DS18B20
  • 【算法】【算法杂谈】从M个数中等概率的选出n个数,保证每一个数的选中概率都是n/m(蓄水池算法)
  • vue3+ts+vite自适应项目——路由、layout布局
  • 数据库之约束、索引和事务
  • centos --libreoffice使用
  • Steam-V Rising 私人服务器架设教程
  • SpringBoot+Vue3实现登录验证码功能
  • spring2:创建和使用
  • 前端如何处理后端一次性传来的10w条数据?
  • Codeforces Round 867 (Div. 3)(A-G2)
  • 蓝奥声核心技术分享——一种无线低功耗配置技术
  • kafka集群模拟单节点故障
  • 笔记:vue-cli-service
  • Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)
  • ChatGPT技术原理 第六章:对话生成技术
  • 【C++ 八】写文件、读文件
  • 【学习笔记】CF613E Puzzle Lover
  • 软考报名资格审核要多久?证明材料要哪些?
  • 2023-04-27 polardbx-LSM-tree的Parallel Recovery性能优化
  • 创作纪念日让 AI 与我共同记录下今天 — 【第五周年、1460天】
  • 枚举法计算24点游戏
  • @Cacheable注解
  • CentOS分区挂载 fdisk、parted方式解析
  • BuildKit
  • c++ 11标准模板(STL) std::vector (二)