目录
函数 function
概念
定义函数
函数定义格式:
案例1:定义函数并通过函数名直接调用执行
案例2:函数的传参,位置变量
案例3:函数的传参,变量传递固定值
案例4:函数的传参,变量传递可变值
案例5:多值传参
案例6:多值传参计算
案例7:函数状态返回值echo、return
案例8:函数return返回值
案例9:输入的数值判断并返回相应值
案例10:列出系统所有用户
案例11:函数库调用
案例12:定义程序是否运行
数组
概念
创建格式
存数据
取数据
脚本取数据
增删改查
函数 function
概念
函数(function),数学术语。其定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。
定义函数
命令的集合,用来完成特定的功能; #功能
提前定义函数,在脚本中任意调用函数名。 #任意调用
使用函数使代码模块化,便于重复使用,增加可读性。 #重复调用,减少代码量
函数定义格式:
1. 函数名(){ 2. shell命令 3. } 4. 5. 或 6. 7. function 函数名 { 8. shell命令 9. }
案例1:定义函数并通过函数名直接调用执行
1. vim fun1.sh 2. #!/bin/bash 3. fun1(){ 4. echo "这是第一种定义函数的方法" 5. } 6. 7. function fun2 { 8. echo "这是第二种定义函数的方法" 9. } 10. 11. fun1 12. fun2
案例2:函数的传参,位置变量
1. vim fun2.sh 2. #!/bin/bash 3. fun1(){ 4. echo "hello $1" 5. } 6. 7. function fun2 { 8. echo "hello $*" 9. } 10. 11. fun1 $1 12. fun2 $*
案例3:函数的传参,变量传递固定值
1. vim fun3.sh 2. #!/bin/bash 3. fun1(){ 4. echo "$i" 5. } 6. i=100 7. fun1
案例4:函数的传参,变量传递可变值
1. vim fun4.sh 2. #!/bin/bash 3. fun1(){ 4. echo "$i" 5. } 6. i=$1 7. fun1
案例5:多值传参
vim fun5.sh #!/bin/bash fun1(){ echo "$1" } fun1 $1 fun1 $2 fun1 $3 或 vim fun5.sh #!/bin/bash fun1(){ echo "$1" "$2" "$3" } fun1 $1 $2 $3 zh=$(fun1 $1 $2 $3) echo "传参的值:$zh"
案例6:多值传参计算
vim fun6.sh #!/bin/bash fun1(){ case $2 in +) echo $1 + $3 = $(( $1 + $3 )) ;; -) echo $1 - $3 = $(( $1 - $3 )) ;; x) echo $1 \* $3 = $(( $1 * $3 )) ;; /) echo $1 / $3 = $(( $1 / $3 )) ;; esac } fun1 $1 $2 $3
案例7:函数状态返回值echo、return
echo可以返回任何字符串结果,用于返回数据;
return只能返回1-255的整数值,通常用来表示状态:0成功、1失败
vim fun7.sh #!/bin/bash fun1(){ echo 100 return 1 } result=$(fun1) echo "函数的状态码是:$?" echo "函数的返回值是:$result" 案例8:函数return返回值 vim fun8-1.sh #!/bin/bash file=/etc/passwd fun1(){ if [ -f $file ];then return 0 else return 1 fi } fun1 if [ $? -eq 0 ];then echo "$file 文件存在" else echo "$file 文件不存在" fi
案例9:输入的数值判断并返回相应值
要求:0-10返回0,10-20返回1,20-30返回2,其他返回3.
vim fun9.sh #!/bin/bash num(){ read -p "请输入对应的数字:" sz if [ $sz -ge 0 -a $sz -lt 10 ];then return 0 elif [ $sz -ge 10 -a $sz -lt 20 ];then return 1 elif [ $sz -ge 20 -a $sz -lt 30 ];then return 2 else return 3 fi } num echo $? vim fun8-2.sh #!/bin/bash pid=$$ nginx_run(){ ps -ef |grep nginx |grep -v grep |grep -v $pid &> /dev/null if [ $? -eq 0 ];then return 0 else return 1 fi } nginx_run && echo "nginx is running" || echo "nginx is stopped"
案例10:列出系统所有用户
vim fun10.sh #!/bin/bash function get_users { users=`cat /etc/passwd | cut -d: -f1` echo $users } user_list=`get_users` i=1 for u in $user_list do echo "The $i user is : $u" let i++ done
案例11:函数库调用
vim /root/base_function function add { echo "`expr $1 + $2`" } function reduce { echo "`expr $1 - $2`" } function multiple { echo "`expr $1 \* $2`" } function divide { echo "`expr $1 / $2`" } function sys_load { echo "cpu load" echo sar -u echo echo "memory info" echo sar -r echo echo "disk usage" echo sar -B echo } vim fun11.sh #!/bin/bash . /root/base_function add 10 20 reduce 90 30 multiple 12 12 divide 12 2 sys_load
案例12:定义程序是否运行
#!/bin/bash pid=$$ fun(){ ps -ef |grep nginx |grep -v grep |grep -v ${pid} &> /dev/null if [ $? -eq 0 ];then return 0 else return 1 fi } fun if [ $? -eq 0 ];then echo "nignx 已运行!" else echo "nignx 已关闭!" fi
数组
概念
可以看成变量,变量一般只能存储一个值,数组可以存储多个值。
创建格式
存数据
names=( zhangsan lisi wangwu zhaoliu)
names[0]=huangting
read -a ages-p "请输入年龄:" #有提示信息定义方法
以整个数组长度为下表
names[${#names[@]}]=sisi ##往最后一行增加数据
取数据
echo ${names[0-n]}
echo ${names[@]} ##查看诉诸里的所有数据
echo ${names[*]}
echo ${#names[@]} ##统计所有数据的个数
echo ${!names[@]} ##获取数组中所有元数的索引下标
脚本取数据
1. #!/bin/bash 2. names=(zhangsan lisi chenwu zhaoliu) 3. for ((i=0;i<4;i++)) 4. do 5. echo ${names[i]} 6. 7. done
增删改查
#!/bin/bash names=(zhangsan lisi chenwu zhaoliu) index=-1 list(){ for ((i=0;i<${#names[@]};i++)) do echo ${names[i]} done } find(){ read -p "请输入姓名:" name for((i=0;i<${#names[@]};i++)) do if [ ${names[$i]} == ${name} ];then index=${i} break fi done echo ${index} } add(){ read -p "请输入用户名:" name names[${#names[@]}]=${name} echo "用户${name}已经添加成功!新的列表为:" list } chage(){ i=$(find) read -p "请输入新的名字:" new names[$i]=${new} echo "修改成功,修改后如下:" list } del(){ i=$(find) names[$i]= echo "删除成功,修改后菜单如下:" list } while true do cat << END 欢迎使用本系统 1.添加用户 2.查找用户 3.修改用户 4.删除用户 5.退出系统 END read -p "请选择操作:" n case $n in 1) list add ;; 2) i=$(find) if [ ${i} -ne -1 ];then echo "用户已找到" else echo "用户未找到" fi ;; 3) list chage ;; 4) list del ;; 5) echo "感谢使用" exit ;; *) echo "请输入正确选项 " exit ;; esac done