shell位于内核层和应用层之间,解释用户的命令交给内核执行。
shell版本:bash,dash,sh,ksh,csh
传统使用命令的形式(复用性差):
1.用户开启终端;2.键入命令和参数;回车执行
Shell脚本是一个包含若干命令与执行逻辑的集合。
脚本解释型语言,动态解释执行,没有编译过程
Shell脚本编写:
.sh 扩展名可省略
首行声明 #!/bin/bash
添加执行权限chmod +x shell.sh
变量
没有作用域概念,都为全局资源
变量定义时需要初始化
不能加无意义空格 类似这种错误写法var a = 1
约定上大写定义变量,数字 下划线 大写字符,不能数字打头
- 永久变量(环境变量) shell中可以直接使用
临时变量
- 用户自定义变量
- 位置变量(内置)
- 特殊变量
默认变量没有类型 默认存储数据为字符串
使用变量要加$取值符号 加{}
使用变量存储内部命令执行结果使用``包裹
‘aaa’表示纯字符串 “ “表示字符串
BL1=SHUCHUBL2=FILEBL3=AAQ1="WHERE ARE YOU"A1=`date`echo "${BL1} ${BL2} ${BL3}"echo "${Q1}"echo "${A1}"
位置变量./app arg1 arg2 arg3shell中argv[0] ----- arg1 ....
特殊变量$* 所有参数$# 参数个数$$ 获取shell进程pid$? 获取上一个命令的返回值$! 上一个执行后台命令进程的pid
四则运算
通过expr命令完成四则运算 (配合反引号
expr)乘法
*要加转义符\*expr 1 + 1expr 1 \* 1```shell NUMA=1 NUMB=2
ANS=expr ${NUMA} + ${NUMB}
echo ${ANS}
-将变量定义为整型`$(NUMA)+$(NUMB)`**逻辑判断**- test测试命令 (结果true/false)- 能测试文件是否存在 测试文件的权限等等....```shell# 整数测试test a -eq b # 判断如果相等为真test a -ne b # 判断不等返回真test a -gt b # 判断大于返回真test a -ge b # 大于等于返回真# lt小于 le小于等于# 字符串测试test str1 = str2 # 相等返回真test str1 != str2test -z str1 # 字符串为0返回真test -n str1 # 字符串非0返回真# 文件测试test -e files # 文件存在返回真test -r files # 文件有读权限 返回真 -w -x 同理test -f files # 普通文件返回真test -d files # 目录文件返回真test -c files # 字符设备文件返回真test -b files # 块设备文件返回真test -s files # 文件非空有内容返回真
特殊符号 逻辑与/或
- -o 逻辑或
- -a 逻辑与
test -f files -o -d files
- if单项选择流程判断
if test -e filesthen # 为真echo "true"elseecho "false"fi # 判断块# elseifif test -f filesthenecho "f"elif test -d filesthenecho "d"elseecho "other"fi# 循环嵌套if test -e filesthenif test -s filesthenecho "e s"elseecho "empty"fielseecho "not exist"fi
简化版本测试语句
test -e files—>[ -e files ]注意空格
