目录
1、运算符
- “$((运算式))”或“$[运算式]”
- expr + , - , \*, /, % (分别是加,减,乘,除,取余)
注意:expr运算符间要有空格
练习:
[root@localhost ~]# expr 2 + 3
5
[root@localhost ~]# expr `expr 2 + 3` \* 4 //利用expr计算(2+3)*4
20
[root@localhost ~]# S=$[(2+3)*4] //采用$[运算符]方式计算
[root@localhost ~]# echo $S
20
2、流程控制
2.1 If判断
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
- [ 条件判断式 ],中括号和条件判断式之间必须有空格
- if后要有空格
练习:输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
[root@localhost test]# vim if.sh
#!/bin/bash
if [ $1 -eq "1" ];then
echo banzhang zhen shuai
elif [ $1 -eq "2" ];then
echo cls zhen mei
fi
[root@localhost test]# bash if.sh 1
banzhang zhen shuai
[root@localhost test]# bash if.sh 2
cls zhen mei
[root@localhost test]# bash if.sh 3
2.2 case语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于java中的break。
- 最后的“*)”表示默认模式,注意这里的*没有双引号,相当于java中的default。
练习:输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。
[root@localhost test]# vim case.sh
#!/bin/bash
case $1 in
1)
echo banzhang
;;
2)
echo cls
;;
*)
echo renyao
;;
esac
[root@localhost test]# bash case.sh 1
banzhang
[root@localhost test]# bash case.sh 2
cls
[root@localhost test]# bash case.sh 4
renyao
2.3 For循环
语法1:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
练习:从1加到100
[root@localhost test]# vim for1.sh
#!/bin/bash
s=0
for (( i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
[root@localhost test]# bash for1.sh
5050
语法2:
for 变量 in 值1 值2 值3…
do
程序
done
注:这个语法就是将值1、值2、值3;分别赋给变量进行循环。
练习:打印所有输入参数。
[root@localhost test]# vim for2.sh
#!/bin/bash
for i in $*
do
echo $i
done
[root@localhost test]# bash for2.sh 1 2 3
1
2
3
比较$*和$@的区别
(1)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1、$2 …$n的形式输出所有参数。
[root@localhost test]# vim for2.sh
#!/bin/bash
for i in $*
do
echo $i
done
for j in $@
do
echo $j
done
[root@localhost test]# bash for2.sh 1 2 3
1
2
3
1
2
3
(2)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1、$2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。
[root@localhost test]# vim for2.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
for j in "$@"
do
echo $j
done
[root@localhost test]# bash for2.sh 1 2 3
1 2 3
1
2
3
2.4 while循环
while [ 条件判断式 ]
do
程序
done
练习:从1加到100
[root@localhost test]# vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
[root@localhost test]# bash while.sh
5050
3、Read读取控制台输入
Read(选项)(参数)
选项:
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒)。
参数
- 变量:指定读取值的变量名
练习:提示7秒内,读取控制台输入的名称。
[root@localhost test]# vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds" NAME
echo $NAME
[root@localhost test]# bash read.sh
Enter your name in 7 seconds yanshuai
yanshuai