Shell编程(上)+https://developer.aliyun.com/article/1623580
3.2获取所有参数:$#
常用于循环:
会给出参数的数量
[root@localhost sh]# vi parameter.sh #!/bin/bash echo "输入的第一个参数:$1" echo "输入的第二个参数:$2" echo $# ~ ~ ~ ~ ~ "parameter.sh" 7L, 97C written [root@localhost sh]# bash parameter.sh 输入的第一个参数: 输入的第二个参数: 0 [root@localhost sh]# bash parameter.sh 10 30 输入的第一个参数:10 输入的第二个参数:30 2
3.3$*
、$@
,含义:都是获取所有传入参数,用于后续输出所有参数。
[root@localhost sh]# bash demo.sh 10 20 直接输出$*:10 20 直接输出$@:10 20 [root@localhost sh]#
3.4 $?含义:上一条命令执行状态
[root@localhost sh]# echo "hello world" hello world [root@localhost sh]# echo $? 0 [root@localhost sh]#
得到0就代表执行成功,非0就是不成功.
四、运算符
- 用
$((运算符))
- 用
expr 运算符 +-*/
[root@localhost sh]# vi yunsuan.sh #!/bin/bash echo "第一种运算:" echo $((2+3)) echo "第二种运算:" expr 2 + 3 ~ ~ ~ ~ "yunsuan.sh" 7L, 91C written [root@localhost sh]# bash yunsuan.sh 第一种运算: 5 第二种运算: 5 [root@localhost sh]#
五、条件判断
5.1常用判断条件
1、整数之间的比较
-eq:等于 -ne:不等于 -gt:大于 -lt:小于 -le:小于等于 -ge:大于等于 = :字符串比较
2、按照文件权限进行判断
-r 文件 判断该文件是否存在,并且是否该文件拥有读权限 -w 文件 判断该文件是否存在,并且是否该文件拥有写权限 -x 文件 判断该文件是否存在,并且是否该文件拥有执行权限 -u 文件 判断该文件是否存在,并且是否该文件拥有SUID权限 -g 文件 判断该文件是否存在,并且是否该文件拥有SGID权限 -k 文件 判断该文件是否存在,并且是否该文件拥有SBit权限
3、按照文件类型进行判断
4、案例实操
<1>、23是否大于等于22
[root@localhost ~]# [ 23 -ge 22 ] [root@localhost ~]# echo $? 0 [root@localhost ~]#
<2>、hello.sh是否有写权限
[root@localhost sh]# [ -w hello.sh ] [root@localhost sh]# echo $? 0 [root@localhost sh]#
<3>、判断 /home/atguigu/cls.txt 文件是否存在
[root@localhost ~]# [ -e /home/atguigu/cls.txt ] [root@localhost ~]# echo $? 0 [root@localhost ~]#
<4>、多条件判断(&& 表示前一条命令执行成功之后才能执行后一条命令)
六、流程控制
6.1Shell_if判断
[root@localhost if]# vi if.sh #!/bin/bash if [ $1 -eq 1 ];then echo "banzhang zhen" elif [ $1 -eq 2 ];then echo "cls zhenmei" fi ~ ~ ~ ~ ~ "if.sh" 9L, 108C written [root@localhost if]# bash if.sh 1 banzhang zhen [root@localhost if]# bash if.sh 2 cls zhenmei
6.2Case语句
[root@localhost sh]# vi case.sh #!/bin/bash case $1 in 1) echo "banzhang" ;; 2) echo "cls" ;; 3) echo "renyao" ;; esac ~ ~ ~ "case.sh" 15L, 93C written [root@localhost sh]# bash case.sh 2 cls [root@localhost sh]#
6.3For循环
[root@localhost sh]# vi for.sh #!/bin/bash s=0 for((i=1;i<=100;i++)) do s=$[$s+$i] done echo $s ~ ~ ~ ~ ~ "for.sh" 8L, 67C written [root@localhost sh]# bash for.sh 5050 [root@localhost sh]#
[root@localhost sh]# vi for2.sh #!/bin/bash for i in $* do echo "banzhangxihuan $i" done ~ ~ ~ "for2.sh" 6L, 59C written [root@localhost sh]# ls batch.sh demo.sh for.sh hello.sh case.sh for2.sh game.sh yunsuan.sh [root@localhost sh]# bash for2.sh linghu banzhangxihuan linghu [root@localhost sh]# bash for2.sh linghu zhangsan banzhangxihuan linghu banzhangxihuan zhangsan [root@localhost sh]# bash for2.sh linghu zhangsan lisi banzhangxihuan linghu banzhangxihuan zhangsan banzhangxihuan lisi [root@localhost sh]#
6.4While循环
[root@localhost sh]# vi while.sh #/bin/bash s=0 i=1 while [ $i -le 100 ] do s=$[$s + $i] i=$[$i + 1] done echo $s ~ ~ "while.sh" 10L, 84C written [root@localhost sh]# bash while.sh 5050 [root@localhost sh]#
七、read读取控制台输入
[root@localhost sh]# vi read.sh #/bin/bash read -t 7 -p "输入你的姓名:" name echo $name ~ ~ ~ "read.sh" 4L, 65C written [root@localhost sh]# bash read.sh 输入你的姓名:令狐荣豪 令狐荣豪 [root@localhost sh]#
八、函数
8.1定义函数与函数调用
[root@localhost sh]# vi function.sh #!/bin/bash demoFun(){ echo "这是我的第一个shell函数" } echo "=====函数开始执行========" demoFun echo "=====函数执行完毕========" ~ ~ ~ "function.sh" 10L, 155C written [root@localhost sh]# bash function.sh =====函数开始执行======== 这是我的第一个shell函数 =====函数执行完毕======== [root@localhost sh]#
[root@localhost sh]# vi function.sh echo "输入第一个数字: echo "输入的两个数字之和为: #!/bin/bash demoFun(){ echo "输入第一个数字:" read aNum echo "输入第二个数字:" read bNum return $(($aNum+$bNum)) } echo "=====函数开始执行========" demoFun echo "输入的两个数字之和为:$?" echo "=====函数执行完毕========" ~ ~ ~ ~ ~ "function.sh" 16L, 272C written [root@localhost sh]# bash function.sh =====函数开始执行======== 输入第一个数字: 1 输入第二个数字: 2 输入的两个数字之和为:3 =====函数执行完毕========