文章目录
- 一、执行shell脚本
- 二、变量的声明
- 三、运算符
- 四、流程控制
一、执行shell脚本
1.新建并进入sh 文档
vi test.sh
2.文档编辑格式 首行: #!/bin/bash(#表示注释 !后面表示默认执行的语言)
3.增加执行权限chmod +x test.sh
4.执行shell脚本的三种方式:
方法一:./test.sh
方法二:sh test.sh
方法三: /bin/bash test.sh(常用场景:环境配置错误的时候)
二、变量的声明
1.变量的命名规范:
- 变量名和等号之间不能有空格
- 命名只能使用英文字母,数字和下划线,
- 首个字符不能以数字开头 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
2.变量的类型
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
3.变量的声明(注意:变量名外面的花括号是可选的,加{}可以有利于变量的区分)
abc=123 #不需要声明变量aaa=$JAVA_PATH #环境变量可以直接引用,如果不使用$ 打印aaa将会出现字符串JAVA_HOME
4.shell字符串(单引号和双引号的区别)
①单引号
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
②双引号
- 双引号里可以有变量
- 双引号里可以出现转义字符
name=\"shell\"#双引号拼接str=\"hello, \"$name\" !\"str01=\"hello, ${name} !\"echo $str $str01 #结果为 hello, shell ! hello, shell !#单引号拼接str02=\'hello, \'$name\' !\'str03=\'hello, ${name} !\'echo $str02 $str03 #结果为 hello, shell ! hello, ${shell} !
5.替换
#!/bin/bashabc=123aaa=$java_homeabc=${abc/\'1\'/\'h\'} 表示在abc变量中找到1就替换为hecho ${aaa} ${abc}
6.将命令的结果分配给变量(以pwd为例)
path=`pwd`(注意:这里是反引号,不是单引号)echo ${path}
7.(()) 双括号表示执行 $[]也可以表示执行
方法一:((c=$a+$a*2))方法二:d=$[$a+$b*2]
8.预定义变量($? 状态为0表示成功执行)
选项 | 说明 |
---|---|
$# | 命令行参数或位置参数的数量 |
$? | 最近一次执行的命令或shell脚本的出口状态 |
$0 | 命令本身 |
$* | 表示所有的位置参数,其值是所有位置参数的值 |
$$ | 变量是shell脚本里面的进程ID。Shell脚本经常使用 $$ 变量组织临时文件名,确保文件名的唯一性 |
- 位置变量
$n:$0代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
注意:bash shell脚本中变量无法存储布尔值,布尔值只能用于条件判断(注意:条件判断中非空都为true)
三、运算符
1.shell数值关系运算符
选项 | 说明 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-le | 小于或等于 |
-ge | 大于或等于 |
2.shell逻辑运算符
选项 | 说明 |
---|---|
-a或&& | 逻辑与 |
-o或
|| |
逻辑或 |
! | 逻辑否 |
3.shell字符串运算符
选项 | 说明 |
---|---|
= | 等于 |
!= | 不等于 |
-z | 判断是否为空 |
4.shell文件运算符
选项 | 说明 |
---|---|
-d | 判断是否为目录 |
-e | 判断目录或文件是否存在 |
-f | 判断是否为文件 |
-r | 判断文件或目录针对当前用户是否可读 |
-w | 判断文件或目录针对当前用户是否可写 |
-x | 判断文件或目录针对当前用户是否可执行 |
四、流程控制
- if test
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
num1=123num2=123if test $num1 -eq $num2thenecho \'两个数相等!\'elseecho \'两个数不相等!\'fi
2.if语句
if 条件thenfi
3.if-else 语句
if 条件then...else...fi
4.if-else-if语句:
if 条件then...elif 条件then...else...fi
5.for循环
for((a=1;a<=5;a++))do...done
6.增强for循环
for a in parm1 parm2 parm3 ...do...done
7.while循环
a=1while [ a <= 5 ]do...let “a++”done
8.case判断
case 变量 in:值1)...;; #相当于break值2)...;;*) #相当于default...;;esac