【shell 判断循环语句 02】
一、流程控制
1、if判断
1.基本语法 if [ 条件判断式 ];then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi
注意:
if后面要有空格
条件判断语句和中括号之间要有空格
举例:输入一个数字,如果是1,返回“testing...” 如果是2,返回“TESTING...” 如果是3,不返回结果
[root@localhost data]# cat if.sh #!/bin/bash if [ $1 -eq "1" ] then echo "testing..." elif [ $1 -eq "2" ] then echo "TESTING..." fi [root@localhost data]# sh if.sh 1 testing... [root@localhost data]# sh if.sh 2 TESTING... [root@localhost data]# sh if.sh 3
备注:$1 -eq "1" --> $1:第一个数字,-eq:判断是否相等
2、case语句
case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
注意:
1)case行尾必须为单词“in”,每一个模式匹配必须已右括号结束
2);; 表示命令结束,相当于Java的break
3)最后的 *) 表示默认模式,相当于Java中的default
举例:输入数字1,返回“zly” 输入2,返回“cjk” 输入3,返回“mxt”
[root@localhost data]# cat case.sh #!/bin/bash case $1 in "1") echo "zly" ;; "2") echo "cjk" ;; *) echo "mxt" ;; esac [root@localhost data]# sh case.sh 1 zly [root@localhost data]# sh case.sh 2 cjk [root@localhost data]# sh case.sh 4 mxt [root@localhost data]#
3、for循环
基本语法1:
for (( 初始值;循环控制条件;变量变化 )) do 程序 done
注意:for后面是双层小括号; do...done相当于Java的{}
举例:1~100的和
[root@localhost data]# cat for.sh #!/bin/bash sum=0 for((i=0;i<=100;i++)) do sum=$[ $sum+$i ] done echo $sum [root@localhost data]# sh for.sh 5050
基本语法2:
for 变量 in 值1 值2 值3… do 程序 done
举例:打印所有输入的参数
[root@localhost data]# cat for.sh #!/bin/bash sum=0 for((i=0;i<=100;i++)) do sum=$[ $sum+$i ] done echo $sum for i in "$*" do echo "zly $i" done for i in "$@" do echo "ym $i" done [root@localhost data]# sh for.sh cls xz bd 5050 zly cls xz bd ym cls ym xz ym bd
注意:$* 和$@都是输出所有内容,如果两个都不加双引号,则输出的是$1,$2,$3...这样的内容,如果加了双引号,$*会按照一个整体输出($1......$3)$@任然会按照$1,$2,$3...这样分开输出
4、while循环
基本语法
while [ 条件判断式 ] do 程序 done
注意:while和[之间有空格,[和条件判断式之间也有空格
举例:1~100相加
[root@localhost data]# cat while.sh #!/bin/bash sum=0 i=1 while [ $i -le 100 ] do sum=$[$sum+$i] i=$[$i+1] done echo $sum [root@localhost data]# sh while.sh 5050
备注:-le 小于等于的意思
二、read读取控制台的输入
基本语法:
read(选项)(参数)
选项:
-p 指定读取值时的提示符
-t 指定读取时等待的时间(s)
参数:
变量:指定读取值的变量名
举例:提示7秒内,读取控制台输入的名字
三、函数
1、系统函数
basename[string/pathname][suffix] 删除所有路径,只保留文件
[root@localhost data]# basename /home/data/helloword.sh
helloword.sh
dirname 去除文件名,只保留路径
[root@localhost data]# dirname /home/data/helloword.sh
/home/data
2、自定义函数
语法:
[ function ] funname[()] { Action; [return int;] } funname
方括号括起来的是非必要填的
注意点:
1、必须在函数调用之前先声明函数,shell脚本时逐行运行的,并且不需要编译,直接运行
2、函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将已最后一条命令运行结果,作为返回值,return后跟数值n(0~255)
举例:
[root@localhost data]# cat sum.sh #!/bin/bash function sum() { s=0 s=$[ $1 + $2 ] echo "$s" } read -p "Please input first num:" n1; read -p "Please input secoune num:" n2; sum $n1 $n2; [root@localhost data]# sh sum.sh Please input first num:1 Please input secoune num:5 6