CentOS until循环与shell函数

Until循环

unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。
until 的使用场景很少,一般使用 while 即可。
Shell until 循环的用法如下:
在这里插入图片描述
until 条件
do
命令
done

输出数字1-50

[root@centos1 mulu]# vim boke1.sh
#!/bin/bash
i=1
until [ $i -eq 51 ]
 do
  echo $i
  let i++
 done
[root@centos1 mulu]# source boke1.sh 
1
2
3
4
5
……省略……
45
46
47
48
49
50

输出1-50之和

[root@centos1 mulu]# vim boke2.sh 
#!/bin/bash
i=1
he=0
until [ $i -eq 51 ]
 do
  he=`expr $he + $i`
  let i++
 done
echo "1-50的总和为:" $he
[root@centos1 mulu]# source boke2.sh
1-50的总和为: 1275

给用户在线用户发送消息,不在线的用户2秒连接一次

if真好理解……

[root@centos1 mulu]# vim boke3.sh 
#!/bin/bash
read -p "请输入你要联系的用户名:" a
 if grep $a /etc/passwd >/dev/null
 then
   echo "当前用户在系统中,正在测试是否在线"
   if who | grep $a > /dev/null
    then
      read -p "该用户在线,输入消息:" b
      echo $b | write $a
      echo "消息:$b 发送成功"
   else
    echo "该用户不在线"
    until who | grep $a > /dev/null
     do
      sleep 2
      echo "正在尝试联系该用户"
     done
      read -p "该用户已上线,输入消息:" b
      echo $b | write $a
      echo "消息发送成功"
   fi
 else
   echo "没有该用户"
 fi

运行该脚本
在这里插入图片描述对方登录后查看
在这里插入图片描述

Shell函数

shell一个非常重要的特性是它可作为一种编程语言来使用。因为shell是一个解释器,所以它不能对为它编写的程序进行编译,而是在每次从磁盘加载这些程序时对它们进行解释。而程序的加载和解释都是非常耗时的。 针对此问题,许多shell(如BourneAgainShell)都包含shell函数,shell把这些函数放在内存中,这样每次需要执行它们时就不必再从磁盘读入。shell还以一种内部格式来存放这些函数,这样就不必耗费大量的时间来解释它们。

函数的优点

1、可以将命令序列按格式写在一起
2、方便重复使用命令序列

shell函数格式

[fanction] 函数名(){
命令序列
[return]
}
其中,return返回的是状态码,需要使用$?调取
echo 返回的是值,使用变量调用
传参:指位置变量
可以带function 函数名() 定义,也可以直接函数名() 定义,不带任何参数。
参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

调用函数
函数名 [参数一] [参数二]

示例:

两数加法计算

 [root@1centos hanshu]# vim hanshu.sh#!/bin/bash
function qiuhe {
 read -p "请输入第一个数字:" a
 read -p "请输入第二个数字:" b
 c=`expr $a + $b`
 echo "两数之和为:" $c
 }
 echo `qiuhe`   #qiuhe 这个函数定义就是你所定义的命令

[root@1centos hanshu]# source hanshu.sh 
请输入第一个数字:1
请输入第二个数字:2
两数之和为: 3

将函数加到自定义函数

复制刚刚写的函数,编辑到 ~/.bashrc

[root@1centos ~]# vim ~/.bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
#下面是我复制的函数
function qiuhe {
 read -p "请输入第一个数字:" a
 read -p "请输入第二个数字:" b
 c=`expr $a + $b`
 echo "两数之和为:" $c
 }
 #接着启动这个 ~/.bashrc
[root@1centos ~]# source ~/.bashrc 
#刚刚定义的函数就可以直接当命令使用了
[root@1centos ~]# qiuhe
请输入第一个数字:5
请输入第二个数字:5
两数之和为: 10
[root@1centos ~]# 

注:一旦定义成local,那变量仅在函数内有效

显示出目录里的子菜单和文件

递归遍历目录
先创建个目录,并在里面赛一点文件

[root@1centos /]# mkdir -p /shiyan/shiyan1/shiyan2
[root@1centos /]# touch /shiyan/1.txt
[root@1centos /]# touch /shiyan/shiyan1/ss1.txt
[root@1centos /]# touch /shiyan/shiya

开始写脚本

[root@1centos hanshu]# vim jiaoben.sh 
#!/bin/bash
function dgmu(){
 for f in `ls $1`
  do
   if [ -d "$1/$f" ]
    then
     echo "$2/$f"
   dgmu "$1/$f" " $2"
   else
    echo "$2$f"
   fi
  done
}
read -p "请输入你要查看的目录:" a
dgmu $a " "

进行验证

[root@1centos hanshu]# source /hanshu/jiaoben.sh 
请输入你要查看的目录:/shiyan
 1.txt
 /shiyan1
  /shiyan2
   ss2.txt
  ss1.txt
[root@1centos hanshu]# 

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/107475593