sh_shell的基础语法2
shell脚本转义字符的替换
shell解释器默认是不会对转义字符的进行自动替换的
需要加入-e 才会进行替换的
#!/bin/sh
a=10
echo "this is $a\n" #不转义
echo -e "this is $a\n" #进行自动转义
result:
this is 10\n
this is 10
转义字符表
| 转义字符 | 转义含义 |
|---|---|
| \ | 反斜杠 |
| \a | 警报 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
shell的运算符
原生的Bash是不支持的简单的数学运算符的,但是它是支持算数,关系,布尔,字符串,文件测试运算符
数学运算符是通过expr的命令完成的
算数运算符
#!/bin/sh
a=1
b=2
test=`expr $a + $b`
echo "a+b:$test"
test=`expr $a - $b`
echo "a-b:$test"
test=`expr $a \* $b` #乘法符号需要转义
echo "a*b:$test"
test=`expr $a / $b`
echo "a/b:$test"
test=`expr $a % $b`
echo "a%b:$test"
result:
a+b:3
a-b:-1
a*b:2
a/b:0
a%b:1
关系运算符
关系运算符只支持数字
#!/bin/sh
a=10
b=20
if [ $a -eq $b ] #检查两个数是否相等,相等back true
then
echo "a -ep b:true"
else
echo "a -eq b:false"
fi
if [ $a -ne $b ] #检查两个数是否相等,不相等back true
then
echo "a -ne b:true"
else
echo "a -ne b:false"
fi
if [ $a -gt $b ] #检测左边的数是否大于右边 大于 back true
then
echo "a -gt b:true"
else
echo "a -gt b:false"
fi
if [ $a -lt $b ] #检测左边的数是否小于右边 小于 back true
then
echo "a -lt b:true"
else
echo "a -lt b:false"
fi
if [ $a -ge $b ] #检测左边的数是否大于等于右边 大于等于 back true
then
echo "a -ge b:true"
else
echo "a -ge b:false"
fi
if [ $a -le $b ] #检测左边的数是否小于等于右边 小于等于 back true
then
echo "a -le b:true"
else
echo "a -le b:false"
fi
result:
a -eq b:false
a -ne b:true
a -gt b:false
a -lt b:true
a -ge b:false
a -le b:true
布尔运算符
布尔运算是数字符号化的逻辑推演法,其运算符就是实现的中间媒介
| 运算符 | 说明 |
|---|---|
| ! | 非运算 |
| -o | 或运算 |
| -a | 与运算 |
exp1
#!/bin/sh
a=100
b=200
if [ $a -lt 80 -a $b -gt 400 ] #与运算
then
echo "true"
else
echo "false"
fi
if [ $a -gt 80 -o $b -gt 400 ] #或运算
then
echo "true"
else
echo "false"
fi
result:
false
true
字符串运算符
| 运算符 | 说明 |
|---|---|
| = | 检测两个字符串是否相等,相等返回 true |
| != | 检测两个字符串是否相等,不相等返回 true |
| -z | 检查字符串长度是否为0 |
| str | 检查字符串是否为空 |
code
#!/bin/sh
$str1="abc"
$str2="abc"
if [ $str1 = $str2 ] #判断字符串是否相等
then
echo "str1等于str2"
else
echo "str1等于str2"
fi
if [ -z $str1 ] #判断字符串长度是否为0
then
echo "the lengrh of str1 is not 0"
else
echo "the lengrh of str1 is 0"
fi
if [ $str1 ] #判断字符串是否为bull
then
echo "the str1 is not null"
else
echo "the str1 is null"
fi
result
str1等于str2
the lengrh of str1 is not 0
the str1 is null
文件操作符
sh的文件操作符是对Linux的文件进行相关的操作
文件测试运算符列表
| 运算符 | 说明 |
|---|---|
| [ -b $file ] | 检测文件是否是块设备文件,如果是,则返回 true |
| [ -c $file ] | 检测文件是否是字符设备文件,如果是,则返回 true |
| [ -d $file ] | 检测文件是否是目录,如果是,则返回 true |
| [ -f $file ] | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true |
| [ -g $file ] | 检测文件是否设置了 SGID 位,如果是,则返回 true |
| [ -k $file ] | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true |
| [ -p $file ] | 检测文件是否是具名管道,如果是,则返回 true |
| [ -u $file ] | 检测文件是否设置了 SUID 位,如果是,则返回 true |
| [ -r $file ] | 检测文件是否可读,如果是,则返回 true |
| [ -w $file ] | 检测文件是否可写,如果是,则返回 true |
| [ -x $file ] | 检测文件是否可执行,如果是,则返回 true |
| [ -s $file ] | 检测文件是否为空(文件大小是否大于0),不为空返回 true |
| [ -e $file ] | 检测文件(包括目录)是否存在,如果是,则返回 true |
exp
#!/bin/sh
file="testfile"
if [ -s $file ] # 判断文件是否存在
then
echo "File exists"
else
echo "File doesn't exist"
fi
result:
File doesn't exist
本文深入探讨了Shell编程中转义字符的自动替换与使用技巧,详细解析了数学、关系、布尔及字符串运算符的实现方式,并通过实例展示了如何在Shell脚本中高效运用这些特性。
315

被折叠的 条评论
为什么被折叠?



