Shell编程之until语句和Shell函数
until语句的结构
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
until语句应运示例
为指定用户发送在线消息
若用户不在线(未登陆系统)则每5秒试一次,直到用户登录系统后再发送信息
用户名与消息通过位置参数传递给脚本
#!/bin/bash
#判断信息格式
if [ $# -lt 1 ];then
echo "Usage:`basename $0` <username> [<message>]"
exit 1
fi
#判断用户是否存在
if grep "^$username:" /etc/passwd >/dev/null;then :
else
echo "用户不存在"
exit 1
fi
#用户是否在线,如果不在线每5秒联系一次
until who |grep "$username" > /dev/null;do
echo "用户不在线"
sleep 5
done
mes=$*
echo $mes | write $username
Sheel函数
将命令序列按照格式写在一起
可方便重复使用命令序列
Sheel函数定义
[ function ] 函数名(){
命令序列
[return x]
}
使用return或exit可以显示地结束函数
调用函数的方法
函数名 [参数1] [参数2]
Shell函数应运示例
示例1
两个数字求和
通过sum(){}定义函数
使用read命令交互输入两个数并求和
示例2
编写登录系统后便可使用的用户自定义函数
编辑用户自定义函数文件/root/function
在当前Shell中加载课执行的函数文件/root/function
在~/bashrc文件中添加source /root/function命令
Shell数组
应运场景包括
(1)获取数组长度
(2)获取元素长度
(3)遍历元素
(4)元素切片
(5)元素替换
(6)元素删除
数组定义方法
数组元素之间使用空格隔开
方法一
数组名= (value0 value1 value2 value3 ....)
[root@localhost ~]# for v in ${num[@]}
> do
> echo $v
> done
[root@localhost ~]# vim 9.sh
#!/bin/bash
num=(11 22 33 44 55)
for ((i=0;i<${#num[*]};i++))
do
let num[i]++
echo ${num[i]}
done
[root@localhost ~]# chmod +x 9.sh
[root@localhost ~]# ./9.sh
方法二
数组名= ([0]=value [1]=value [2]=value .....)
方法三
列表名="value1 value1 value2 ...."
数组名= ($列表名)
方法四
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
数组包括的数据类型
数值类型
字符类型
使用“”或‘’定义
Shell数组操作
获取数组长度
${数组名[@/*]}
读取某下标赋值
${数组名[下表]}
数组遍历
在这里插入代码片
Shell脚本调试
echo命令
bash命令
语法
sh [-nvx] 脚本名
常用选项
-n:不执行脚本,仅检查语法。没有语法问题不显示任何内容、有问题提示报错
-v: 执行脚本时,先显示脚本内容,然后执行脚本。存在错误时,给出错误提示
-x:将执行的脚本内容输出到屏幕上
set命令
set -x:开启调节模式
set +x:关闭调节模式