一、shell中的输入和输出
1.输入read
read 变量名 # 输入变量(多个值输入使用空格隔开)
read -p “提示字符串” 变量名 #-p :提示符 #这个中的换行符可以输出
提示换行的操作:
read -p $’ 提示字符串 \n’ name
read -t 秒 变量名 #在设定的秒数之前可以输入
read -n num(自己定义的) 变量名 #在输入num字符后就结束了
read -s 变量名 #输入的内容不会回显 ,一般用于密码的输入
2.echo输出
echo string(字符串使用单双号都可以)
echo $变量名
echo
变
量
名
s
t
r
i
n
g
)
e
c
h
o
"
{变量名}string) echo "
变量名string)echo"{变量名} string" -------输出结束后默认有换行符的
echo -n 变量/字符串 #取消换行符
echo -e “string\n” #解析换行符,echo默认不解析换行符
echo KaTeX parse error: Undefined control sequence: \n at position 21: …ase input name \̲n̲ ̲> ' #’ '中的换行符可以输出
**
二、shell中的算数运算
**
shell兼容c语言中的所有算数运算,同时进行了扩展
** (幂运算) *(通配符) *(乘法) ( )(数组) (\ ( 小括号) <>(大于小于)
在shell中默认所有的变量都是字符串,要对变量进行算数运算,需要使用特殊符号
1.(( ))
格式:((表达式1,表达式2,表达式3))
最后一个表达式的结果就是输出的结果
获取输出的结果
变量名=$((表达式1,表达式2,表达式3))
注:
1>括号中表达式使用变量时,可以加
,
也
可
以
不
加
,也可以不加
,也可以不加,建议加$
2>运算符的前后可以加空格,也可以不加空格
3>括号内可以写C语言中任何的算数运行,甚至更复杂的运算。
2.$[ ]
格式 : 变量名(进行这个运算时必须使用一个变量存取返回值)=$(可加可不加)[表达式1,表达式2,.....] -----最后一个表达式作为整个表达式的结果
3.let
格式: let sum=var运算符var2
注:
let必须放在整个语句的最前边,对运算符两边的空格不做要求
4.expr
格式:expr 表达式
1>使用变量时,必须使用$
2>运算符的前后必须加空格
3>expr无法进行自增自减的操作
4>expr使用部分转义符需要进行转义(\* \< \> \( \) )----------也可以使用单引号
5>expr使用变量时 ,最后使用双引号将变量括起来
例:expr=''$var1" 运算符 "$var2"
6>expr赋值给一个变量
ret=` expr "$var1" 运算符 "$var2"`
7>字符串的运算
expr match STRING REGEXP
从STRING字符串中的第一个字符开始匹配REGEXP字符串
匹配成功返回。匹配的字符个数,失败返回0
expr substr STRING POS LENGTH
从字符串的第POS位置开始截取,截取的长度为LENGTH,
将截取的字符串返回 (注:字符串的第一个字符是从1开始的)
expr index STRING CHARS
查找CHARS字符在STRING字符串出现的位置,返回值是字符串的下边(注:字符串的第一个字符从1开始)
如果一个字符串中有多个相同字符,匹配到第一个就会结束
expr length STRING
计算STRING字符串的长度
三、shell循环语句
1.if语句
if [表达式]
then
shell语句
fi
2.if else
if [表达式 ] ;then
shell语句
esle
shell语句
fi
3.对层if,elif语句
if [表达式 ] ;then
shell语句
esif [表达式] ;then
shell语句
else
shell语句
fi
注意:[]中的所有表达式直接的所有变量和参数都需要用空格隔开
1>字符串对象的比较(在字符串的判断中,都需要加上" ")
参数:
-z 判断字符串是否为空
-n 判断字符串是否为非空
=或== 有用于判断字符串是否为空
!= 不等于
>或> (加转义符防止被误认为重定向)
2>数字对象
参数:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
3>文件属性
-b filename 判断文件是否存在,是否是块设备
-c filename判断文件是否存在,是否是字符设备
-d filename判断文件是否存在,是否是目录
-f filename判断文件是否存在,是否是普通文件
-p filename判断文件是否存在,是否是管道文件
-L filename判断文件是否存在,是否是链接文件(经测试链接文件也是普通文件)
-S filename判断文件是否存在,是否是套接字文件
-e filename判断文件是否存在
-s filename判断文件是否存在,判断文件是否为空
-r filename判断文件是否存在,是否有可读权限
-w filename判断文件是否存在,是否有可写权限
-x filename判断文件是否存在,是否有可执行权限
-nt 文件是否更新
-ot 文件是否更旧
-ef 文件的inode是否一致
4>逻辑运算
-a 与 &&
-o 或 ||
!非 !
2.case in 语句(等价于c语言中的switch语句)
case $变量名 in
表达式1)
shell语句
;;
表达式2)
shell语句
;;
*)
shell语句
;;(最后一句可以省略)
esac
表达式的形式:
[a-zA-Z] a-z和A-Z的所有字符
[1-9] 数字1-9
* 通配符,所有的
a|c|e|f —a c e f 字符
y|Yes|YES|yes 任意一个字符
3.循环语句—while
while [ 表达式1 ]
do 循环体2
done
执行顺序:[ 1 ][2,1][2,1]…
4.循环语句—for
方式1:for((表达式1;表达式2;表达式3))
do
循环体4
done
执行顺序:[1,2][4,3,2][4,3,2][4,3,2]…
方式2:for var in 单词列表
do
循环体
done
==>单词列表中的每个以空格隔开的字符串依次赋给变量var,知道单词列表中的所有的字符串全部取值,则结束for循环循环体
5.选择语句 select in
select var in 选项列表
do
语句
done