1.shell 脚本创建与执行(01.sh)
一般都是**.sh文件
#!:需要用谁来解析执行该 shell 脚本echo:打印输出
1 | # 需要用谁来解析执行该 shell 脚本 |
2.自定义变量与环境变量(02.sh)
变量设计规则:
- 命名跟Java规范一样
- shell 中
默认都是字符串类,如果需要用到其他类型,需要额外处理 - 变量用等号连接,千万注意
不能有空格 - 变量的值如果有空格,需要用
单引号或者双引号包括
$:取变量的值echo "CMAKE_PATH = ${CMAKE_PATH}":输出环境变量CMAKE_PATH的值- soPath=`pwd`:记得带上``代表执行命令并返回
1 | #指定一个命令的执行结果返回给变量 |
1 | str1="str1" // str1 |
3.位置参数变量与预定义变量
3.1.获取位置参数(03.sh)
$n来获取参数,$0 代表程序本身,$1-$9代表第一个参数到第九个参数,十以上的参数要用大括号${10}$*代表的是命令中的所有参数,加上引号才会把参数看成一个整体“$0,$1,$2,$3,$4…$n”,否则区别对待$@代表命令中的所有参数,但是会把参数区分对待 “$0”,”$1”,”$2”…”$n”$#代表参数中的个数
1 | echo "$0=$0" |
3.2.预定义变量
定义:是 bash 中已经定义好的,我们可以直接拿过来用,变量的作用都是固定
$?:返回的是上一个执行命令的返回值,执行成功返回 0 ,执行失败返回非0$$:获取当前脚本的进程号$!:获取最后一个后台执行的进程号
3.3.获取输入的变量(04.sh)
read -p "提示" name:name 代表接受的变量名read -sp "提示" pwd:-sp 看不到输入的密码,pwd 代表接受的变量名read -t 5 -n 1 -p "please input [y|n]" input:-t 5代表5秒没响应就退出,-n 1 代表只能输入1个字符
1 | # 获取用户及时输入的参数 |
4.条件判断(测试指令)(05.sh)
条件判断 test 表达式 或者 []
数字计算:
num3=$(($num1+$num2))- num3=`expr $num1 + $num2` // 执行 expr命令,一定要有空格 传的三个参数
test $str1 == $str2//==之间一定更要空格
字符串空判断:
[ str ]: 测试字符串是否不为空,[]中间必须带空格test -n str: 测试字符串是否不为空test -z str: 测试字符串是否为空[ str1 = str2 ]: 是否相等,[]中间必须带空格
数字:
[ num1 -eq num2 ]: 测试是否相等[ num1 -ne num2 ]: 不等[ num1 -ge num2 ]: >=[ num1 -gt num2 ]: >[ num1 -le num2 ]: <=[ num1 -lt num2 ]: <
文件:
test -d file:是否是目录test -f file:是否是普通文件test -e file:文件是否存在test -L file:是否是链接test -r file:是否可读test -w file:是否可写test -x file:是否可执行
5.流程语句 if (06.sh)
有两种方式:
1 | if [ 表达式 ]; then |
1 | # 判断有没有输入 |
6.自定义函数(06.sh)
- 函数需要先定义再使用,
function和()必须有其一 - 可以直接采用方法名调用,不用加()
- $1 参数不是代表的脚本参数,而是方法传递过来的参数
1 | // function和()可以只有一个 |
7.流程语句 for、while、case (06.sh)
for:
1 | for((i=0;i<10;i++)) |
while:
1 | sum=0 |
case:
1 | case $2 in |
8.输出重定向(07.sh)
0: 标准输入,1:标准输出 2:标准错误输出
echo "Hello Shell!" > log.txt// 输出日志到 log.txt 中,>代表重新生成echo "Hello Shell!" >> log.txt// 输出日志到 log.txt 中,>>代表追加exec 1>log.txt:标准的所有输出,重新生成全部添加到log.txt中exec 2>>log.txt:标准的错误输出,全部追加到log.txt中
1 | # 永久重定向 echo 标准输入:0 标准输出:1 标准错误:2 |