shell-循环语句及函数

**

For 循环 指定次数循环 遍历 把集合中每个元素按个读取一遍

**
1、for语句的结构:
for 变量名 in 取值列表
do 命令序列
done

#!/bin/bash         固定开头声明
for ((i=1;i<=10;i++))
do
   echo $i
Done               执行一次就显示出一行

在这里插入图片描述
在这里插入图片描述
运用实例

1)批量添加用户
  用户名存放在users.txt文件中,每行一个
  初始密码均设为123456
  验证脚本
  
实验代码:
1、#!/bin/bash
list=$(cat /opt/users.txt)
for user in $list
do
  #添加用户
   useradd $user
  #添加密码q
   echo "123" | passwd --stdin $user
   echo "创建$user成功!!!"
done

2、  2)根据ip地址检查主机状态
  IP地址地址存放在ipadds.txt文件中,每行一个
  使用ping命令测试主机的联通性
  
#!/bin/bash
list=$(cat /opt/ipaddr.txt)
for ip in $list
do
ping -c 3 -i 0.2 -w 3 $ip > /dev/null   -c 3:发3个包 -i:时隔0.2秒 -w 等待3秒
 if [ $? -eq 0 ];then
   echo "${ip} is up"
 else
  echo "${ip} is down"
 fi
done

Exit 1 1为状态码 退出应用程序
Break 跳出循环

1、计算1-100的奇数和:
#!/bin/bash
for ((i=1;i<=100;i++))
do
    if [ `expr $i % 2` -eq 1 ];then
      let sum+=$i     
    fi
done
echo 和为:$sum

2、计算1-100的偶数和:
#!/bin/bash
for ((i=1;i<=100;i++))
do
    if [ `expr $i % 2` -eq 0 ];then
     let sum+=$i     中间不能有空格
    fi
done
echo 和为:$sum
运算需要需要配合let来配合使用!!!  或者用(( xxx ))
++  自身变量加1          
+=5 自身变量加5
-=5  自身变量减5
\*=  自身变量乘5
/=   自身变量除5
%=   自身变量除5余数

2、while语句的结构:

重复测试某个条件,只在条件成立则反复执行
while 条件测试操作
do
命令序列
done

$(   ):运算
${   }:变量
$[   ]:表达式

((  )):运算
Let:运算

[   ]:判断
Test


If     只执行一次   for
While  反复执行
1、100以内不能被3整除的数:

#!/bin/bash
i=100
while  [ $i -gt 0 ]
do
  if [ ! `expr $i % 3` -eq 0 ];then
   echo $i
  fi
  let i--
done

2、另一种实现方法:

#!/bin/bash
i=100
while  [  $i  -gt 0 ]
do
  if [  `expr $i % 3` -eq 0  ];then
    let i--
    continue
  else
     echo  $i
  fi 
let i--
done

3、until语句的结构:

重复测试某个条件,只有条件不成立则反复执行。
until
do
命令序列
done
运用实例:

实例1:
计算1-50的和
#!/bin/bash
i=1
sum=0
until [ $i -eq 51 ]
do
  let sum+=$i
  let i++
done
echo "和:$sum"

实例2:
为指定用户发送在线消息
 若用户不在线(未登录系统),则每5s试一次,直至用户登录系统后再发送信息。
 用户名与消息通过位置参数传递给脚本。
 
 #!/bin/bash
 username=$1
 #格式参数不能为空
 if [$# -lt 1 ];then
     echo "Usage:`basename $0` <username> [<message>]"
     exit 1
 fi
 #验证是否属于系统用户
 if grep "^username" /etc/passwd > /dev/null;then :
    else
      echo "not user"
    exit 2
 fi
 #测试用户是否在线,如果不在线,每5S联系一次
 until who | grep "$username" > /dev/null;do
   echo "user not login"
   sleep 5
   done
#发送消息
echo "$2" | write "$username"
echo "${username}发送成功!!!"

shell函数:

概念:
1、将命令序列按格式写在一起
2、可方便重复使用命令序列
定义:
[ funciton ] 函数名(){
命令序列
[ return x ]
}
调用函数的方法:
函数名 [参数1] [参数2]

#!/bin/bash
function sum(){
   read -p "请输入第一个整数:" num1      #######下面的4行代码是此函数的公式模板,只在本>函数体内有实际含义,不涉及到函数体之外!!!!!
   read -p "请输入第二个整数:" num2
   SUM=$[$num1+$num2]
   echo $SUM
   echo 100
}
 number=`sum`          ######## `sum`代表上面的整个函数体的返回值(里面设定是100)故返回$?是100
   echo $?
   echo $number

#number=`sum`
#echo $number            ####### $? 返回的是“echo $number ”处理是否成功?
# $?                           #####正常完成就返回0!!!

递归
1、调用自己本身的函数

实例1:
递归遍历目录:
#!/bin/bash
function list_files(){
  for f in `ls $1`
do
  if [ -d "$1/$f" ];then
    echo "$2$f"
    list_files "$1/$f" " $2"
  else
    echo "$2$f"
  fi
done
}
list_files "/var/log" " "

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值