一、read
1、read 变量1 变量2....
#!/bin/bash
echo "请输入两个数>: "
#遇到空格就分割字符串
read var1 var2
echo "var1 = $var1"
echo "var2 = $var2"
2、read -p
#!/bin/bash
# read -p "提示内容" 变量
# 类似于上一个命令的echo和read的结合
read -p "请输入两个变量" var1 var2
echo "var1 = $var1"
echo "var2 = $var2"
3、read -a
#!/bin/bash
#read -a 数组名 数组的数据依次对数组赋值
read -a arr
echo "${arr[0]}"
#可以和-p结合使用
read -p "请输入3个数字" -a arr
echo "${arr[0]}"
echo "${arr[@]}"
4、read -n num 变量名
#!/bin/bash
echo "输入数字:> "
#当输入的字符个数为2的时候程序自动结束
read -n 2 var1 var2
echo "var1 = $var1"
echo "var2 = $var2"
5、read -s 变量名
#!/bin/bash
#read -s 静默输入 输入时不显示输入的结果
read -p "请输入用户名" username
read -p "请输入密码" -s passwd
echo "username = $username"
echo "passwd = $passwd"
6、read -t 秒数 变量
#!/bin/bash
#read -t 秒数 变量
# 在规定的时间内输入变量的值
read -t 3 var1
# 在三秒内输入var1的值
echo "var1 = $var1"
二、shell 运算
1、(())
1、支持整数的运算,但不支持浮点数的运算
2、可以向C语言一样进行复杂的运算
#!/bin/bash
var1=10
var2=20
# 这里括号内的$可以省略不写
var3=$(($var1+$var2))
echo "var3 = $var3"
2、$[ ]
1.支持整数运算,不支持浮点运算
2.在运算的时候,取变量的内容可以加$也可以不加3、运算的结果一定要赋值给一个变量保存
4、用法跟(())一样
#!/bin/bash
var1=10
var2=100
var3=$[ $var1 + $var2]
echo "var3 = $var3"
## 幂运算
var4=$[2**2]
echo "var4 = $var4"
3、expr
1.支持整数运算不支持浮点运算
2.在运算的时候需要加上空格
3.引用变量的时候必须加上$
4.expr 可以输出结果
5.如果需要将结果赋值给一个变量,那么需要命令置换
6.expr 的算术运算
+ - \* /
关系运算
\> \< \>= \<= ==
如果需要加上括号运算,括号需要转义
\( \)
7.expr 不能进行幂运算
#!/bin/bash
var1=10
var2=20
expr $var1 + $var2
var3=10
var4=30
expr \( $var3 + $var4 \) \* var4
三、选择结构
语法结构:
if 判断式
then
语句块;
fi
判断式
第一种:
[ 判断式 ] [ ] 左右必须有空格;
第二种:
test 判断式 test 左右也必须有空格
shell整数的判断式
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
-eq 等于
-ne 不等于
与或非:
&& -a
|| -o
! !
一个小demo
#输入一个成绩判断其等级
#!/bin/bash
read -p "请输入成绩" score
if test $score -gt 100 -o $score -lt 0
# -gt 是大于的意思
# -o 是或的意思
# -lt 是小于的意思
then
echo "请输入0~100之间的数字"
bash $0
#$0代表的脚本名字,在前面加上bash则代表执行该脚本
exit 1
# 重新执行该脚本
fi
#-ge 代表大于等于的意思
#-le 代表小于等于的意思
#-a 代表且的意思
if[ $score -ge 90 -a $score -le 100 ]
then
echo "S"
elif [ $score - ge 80 -a $score -lt 90 ]
then
echo "A"
elif [$score -ge 70 -a $score -lt 80]
then
echo "B"
elif [$score -ge 60 -a $score -lt 70]
then
score "C"
else
echo "D"
fi
四、字符串的比较
-z 判断字符串是否为空
-n 判断字符串不为空
= 判断字符串相等
!= 判断字符串不等
/> 判断字符串大于
/< 判断字符串小于
对字符串的判断,在引用字符串内容的时候加上引号;
#从终端输入两个字符比较两个字符的大小
read -p "请输入两个字符" var1 var2
if [ -n var1 -0 -n var2 ]
then
if[ "&var1" \> "$var2" ]
then
echo "var1 > var2"
elif [ "$va1" = "$var2" ]
then
echo "var1 = var2"
else
echo "var1 < var2"
fi
else
echo "var1 || var2 is empty"
fi
五、shell 对文件的判断
1、对文件类型的判断
-f 判断文件是否存在并判断是否为普通文件
-d 判断文件是否存在,并判断是否为目录文件
-L 判断文件是否存在,并判断是否为链接文件
-b 判断文件是否存在,并判断是否为块设备文件
-c 判断文件是否存在,并判断是否为字符设备
-p 判断文件是否存在,并判断是否为管道文件
-S 判断文件是否存在,并判断是否为套接字文件
-s 判断文件是否存在,文件长度大于0为真
-e 判断文件是否存在
一个demo
#输入一个文件判断类型
read -p "请输文件名" file
if [ -e $file ]
then
echo "文件存在"
if [ -d $file ]
then
echo "d"
elif [ -L $file ]
then
echo "l"
elif [ -b $file ]
then
echo "b"
elif [ -c $file ]
then
echo "c"
elif [ -p $file ]
then
echo "p"
elif [ -f $file ]
then
echo "f"
else
echo "S"
fi
else
echo "文件不存在"
fi
2、对文件权限的判断
-w 判断文件是否具备写权限
-r 判断文件是否具备读权限
-x 判断文件是否具备执行权限
一个小demo
:<<!
eg:
输入一个文件,判断文件是否存在,如果存在那么再判断文件是否具备
写权限,如果写权限就往这个文件写入一句“hello world”,如果
不具备写权限,那么赋上写权限再写人hello world;
!
read -p "请输入一个文件名" file
if [ -e $file ]
then
if [ -w $file ]
then
echo "hello world" > $file
else
chmod 777 $file
echo "hello world" > $file
fi
else
touch $file
fi