条件测试操作和条件测试语句:
$?:条件判断,失败或者成功,真或者假,true false
shell脚本中:0为真,true 执行成功;其他所有的非0 都是假, false,执行失败
条件测试的命令:
格式一:
test 操作符 文件名
操作符:
-e exist 测试目录或者测试文件是否存在
-d 只能测试是否为目录
-f 只能测试是否为文件
-r 测试当前用户是否有读权限
-w 测试当前用户是否有写权限
-x 测试当前用户是否有执行权限
实验:
test -e passwd.txt
echo $?
test -e passwd.tx
echo $?
text -d passwd.txt
echo $?
test -d kgc
echo $?
test -r kgc/
echo $?
test -w kgc/
echo $?
test -x kgc/
echo $?
test 也可以进行数值和字符串比较
字符串比较,只能比较的是内容是否一致
常用的比较符:
第一种写法:
注意:一下比较符只能用于比较整数:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
第二种写法:
== != > < >= <=
第二种格式:
【条件表达式】
例如【 3 -gt 2 】
第三种方式:强烈推荐的方式
[[条件表达式]] 双中括号的写法比单中括号的功能更加强大,可以避免歧义的出现,而且双中括号可以支持正则表达式
逻辑测试的表达语句:
-a 或 && 逻辑且 表示前后的条件都要成立
-o 或 || 逻辑或,表示前后成立一个即可
! 逻辑否,表示取反
在单括号中 字母与字符都可以使用
但是在双括号中只能用字符,但是字母无法使用,会报错
例如 [ $a -lt 3 -a $a -eq 5] 或者
if语句:
单分支结构:
if 条件语句
then 命令序列
fi
例如:
if [ 3 -gt 2 ]
then echo "ok"
fi
双分支结构:
if 条件语句
then 命令序列
else 命令序列
fi
实验:
有三个IP地址,已位置变量的方式传参
ping通的打印可以通,保存到 /opt/hosts.txt
不通的要打印ping不通
多分支结构:
if 条件语句
条件判断的CASE语句
case 变量值 in
模式1 )
命令序列15
;;
模式2)
命令序列2
;;
*)
;;
命令序列
esac
she11脚本日测: 1、写出shell脚本的执行方式(不少于三种)
bash sh ./(赋权执行) source
2、从指定的文件读取数据,并给指定zhangsan设置密码
vim passwd.txt passwd --stdin dn < passwd.txt
3、变量有几种类型,自定义变量的规范
变量的类型:int:整数 string:字符串 truefalse:布尔类型 浮点:1.23
自定义的变量名:不要使用系统命令作为变量名
不要使用中文
不能使用特殊符合开头 ,只有_可以做开头
不要使用数字开头
4、"" ' ' `` 三个符号的特点
"" ' ' 赋值变量时没有区别
打印变量时 "" 不影响变量的值打印结果。 ' '只会输出变量名的字符串
``执行里面的命令,把命令的执行结果赋值给变量
5、$ * 和$@的区别是什么,$?的特点
$*:加了引号当做整体处理 不加和$@一样,一个个处理
$@:加不加引号,都当成一个一个处理
$?:上一次命令或者脚本执行之后的状态码,所有非0都是异常 只有0才表示执行成功
6、怎么定义全局变量
export
/etc/profile 可以定义全局变量
7、写出计算14+162*5/2+3的shell脚本计算格式,并赋值给变量num。
num=$(awk 'BEGIN {PRINT 14+162*5/2+3}')
或者num=$((14+162*5/2+3))
或者let num=14+162*5/2+3