shell脚本之循环语句和转义字符

42 篇文章 1 订阅
1 篇文章 0 订阅

一、循环语句

1、for循环

读取不同的变量值,用来逐个执行同一组命令

for 变量名 in 取值列表
do                   
   命令序列
done

在这里插入图片描述

示例1、1~100求和

#!/bin/bash
sum=0
for i in {1..100}
do
    sum=$[$i+$sum]
done
  echo "0-100的和为:" $sum

#如果算的是1~100之间每隔两位数的和,即{1、3、5、7、...、99},for循环如下: 
for i in {1..100..2}
#其他都是一样的。

在这里插入图片描述
也可以使用 i++ 自加的方法:
在这里插入图片描述

示例 2、1~a,(a<=100)求和

#!/bin/bash
read -p "请输入1~100任意一个数:" a
sum=0
for ((i=1;i<=$a;i++))
do
sum=$[ $sum+$i  ]
done        
echo "$sum" 

在这里插入图片描述
验证:
在这里插入图片描述

示例 3、1~100求奇偶数和

sum=0
sum1=0
for ((i=1;i<=100;i++))
 do
 a=$[ $i%2 ]
if [ $a = 0 ]
 then
 sum=$[ $sum+$i ]
 else sum1=$[ $sum1+$i  ]
fi
done
echo   "偶数和:"  
echo "$sum" 
echo   "奇数和: " 
echo "$sum1" 

在这里插入图片描述
验证:
在这里插入图片描述

示例 4、 过滤1~100 所有奇偶数

#!/bin/bash
echo -n  "偶数 "
for ((i=1;i<=100;i++))
do
 a=$[ $i%2 ]
if [ $a == 0 ]
 then       
 echo -n "$i,"
fi          
done        
echo -n  "奇数 "
for ((i=1;i<=100;i++))
do            
 a=$[ $i%2 ]
if [ $a == 1 ]
 then
 echo -n "$i,"
fi
done

在这里插入图片描述
在这里插入图片描述

示例 5、检测指定范围主机

检测指定范围主机是否通信,并将通信主机IP输出到文件 host_ip.txt 中

touch host_ip.txt
for i in 192.168.1.{1..10}
do

ping -c 1 -i 0.2 -w 1 $i &>/dev/sull
if [ $? = 0  ]
then
echo  $i>>host_ip.txt
fi
done

在这里插入图片描述

示例 6、筛选文件

输出/dev 目录中所有的可执行文件

# 筛选可执行文件
for a in /dev/*
do
  [ -x "$a" ]
if [ $? = 0 ]
 then
 echo "$a"
fi
done

在这里插入图片描述
在这里插入图片描述

验证:

示例 7、创建用户

1) 批量添加用户
用户名以use开头,按数字顺序进行编号
一共1-20,添加20个用户
初始密码均设为123456

#!/bin/bash
i=1
for i in {1..20}
do 
useradd user$i
echo "123456" | passwd --stdin user$i 
i++     
done        

在这里插入图片描述
在这里插入图片描述

  1. 执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
#/bin/bash
a=`awk -F : '{ print $1 }' /etc/passwd`
for i in $a
do
  read -p "请输入用户名:" b
  if [ $b = $i ];then
    echo "该用户已存在"
    exit    
  else      
    useradd $b  
    case $? in 
  0)          
     echo "你将创建此用户"
     read -p "请输入密码:" c
     echo -e "$c\n$c\n" | passwd $b
   ;;
  *)
    esac
  exit
  fi
done

在这里插入图片描述

在这里插入图片描述

二、while循环

  • 根据特定条件反复执行一个命令序列,直到不满足条件为止。
  • 编写时可能会出现死循环,要避免这种情况发生
  • true(真)和false(假)为特殊条件测试操作,也可以在if语句的条件测试中使用。
  • true作为条件时,表示条件永远成立,无限执行,也就是死循环,需要强制终止
  • false作为条件时,表示条件不成立,不执行命令序列
#while语句结构
while 条件测试操作
do
  命令序列
done

示例1、1~100求和


#!/bin/bash
#1~100 求和
i=1
sum=0
while [ $i -le 100 ]
 do
  sum=$[$sum+$i]
  let i++
 done
echo "1-100所有整数和:" $sum 

在这里插入图片描述
执行结果:
在这里插入图片描述

示例 2、1~a,(a<=100)求和

#!/bin/bash
#1~a 求和:
i=1
sum=0
read -p "请输入:(1-100)" a
while [ $i -le $a ]
  do
  sum=$[$sum+$i]
  let i++
  done
echo "1-a所有整数和:" $sum

在这里插入图片描述
执行结果:
在这里插入图片描述

示例 3、1~100求奇偶数和

#!/bin/bash
# 奇偶数和:
sum1=0
sum2=0
i=1
while [ $i -le 100 ]
do
  a=$[$i%2]
  if [ $a = 0 ];then
  sum1=$[$sum1+$i]
  else
  sum2=$[$sum2+$i]
  fi
  let i++
done
echo "偶数和:$sum1"
echo "奇数和:$sum2"

在这里插入图片描述
验证结果:
在这里插入图片描述

示例 4、 过滤1~100 所有奇偶数



#!/bin/bash
# 过滤1~100 奇偶数
i=1
echo "奇数:"
while
[ $i -lt 100 ]
do
a=$[ $i % 2 ]
if 
[ $a -eq 1 ]
then
echo    "$i " 
fi          
let i++     
done        
           

o=1           
echo "偶数:" 
while
[ $o -le 100 ]
do  
p=$[ $o % 2 ] 
if  
[ $p -eq 0 ]
then
echo   "$o "
fi  
let o++
done

在这里插入图片描述
在这里插入图片描述

示例 5、检测指定范围主机


#!/bin/bash
# 检测指定范围主机
i=1

while [ $i -le 254 ]
do


  ping -i 0.5 -c 1 -w 1 192.168.1.$i &>/dev/null
  if [ $? = 0 ]
  then
  echo "192.168.1.$i 在线">>host_ip.txt
  else
  echo "192.168.1.$i 不在线"
  fi
  let i++
done

在这里插入图片描述
在这里插入图片描述

示例7、猜商品价格

#!/bin/bash
#
a=$[$RANDOM % 1000]
i=0
b=0
while [ $b -eq 0 ]
do
  read -p "猜猜是哪个数,范围在0~999:" shu
  let i++
  if [ $shu -eq $a ];then
          echo "祝贺你,猜了$i 次就猜中了。"
          let b++
  elif [ $shu -gt $a ];then
          echo "你猜大了"
  elif [ $shu -lt $a ];then
         echo "你猜小了"
  fi

done
echo "你总共猜了 $i 次"
~                            

在这里插入图片描述

在这里插入图片描述

三、until循环语句

  • 与while相反,重复测试某个条件,只要条件不成立则反复执行
#!/bin/bash
#
a=0
sum=0
until [ $a -gt 100 ]
do
  sum=$[$sum+$a]
  let a++
done
echo "1~100的和:$sum"

在这里插入图片描述
在这里插入图片描述

四、结束循环----break和continue

  • break跳出单个循环

#!/bin/bash
for ((a=1; a<=10; a++))
do
        echo "outer loop: $a"
        for ((b=1; b<=20; b++))
        do
                if [ $b -eq 5 ]
                then
                        break
                fi
                echo "inter loop: $b"
        done
done

在这里插入图片描述
在这里插入图片描述

  • continue中止某次循环中的命令,但不会完全中止整个命令
#!/bin/bash
for ((a=1; a<=15; a++))
do
	if [ $a -gt 5 ] && [ $a -lt 10 ]
	then
		continue
	fi
	echo "current value: $a"
done

在这里插入图片描述
在这里插入图片描述

五、IFS字段分隔符

默认包含 空格,制表符,换行符
查看命令:set | grep IFS
IFS=$' \t\n'

修改成只换行
IFS=$'\n'

IFS=:
IFS=','

IFS.OLD=$IFS
IFS=$'\n'
...
IFS=$IFS.OLD

输出环境变量PATH所包含的所有目录以及其中的所有可执行文件

在这里插入图片描述

六、转义字符

echo -n 表示不换行输出

echo -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的演示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值