shell工作中必不可少。今天来系统学习一下shell。
shell的编写离不开linux命令,看这篇。
文章目录
1.shell demo
#!/usr/bin/env bash
echo "hello,shell."
上面的文件名:echo.sh
运行command:sh echo.sh
输出:hello,shell.
2.shell变量
2.1 变量基础
定义变量:变量名不加美元符号。
使用一个定义过的变量时,要在变量名前加美元符号。
#!/usr/bin/env bash
SERVICE="test"
echo $SERVICE
echo "$SERVICE version:1.1.1"
echo "our service name is ${SERVICE}abc"#加花括号是为了帮助识别变量的边界,建议加上
文件名:variable.sh
运行command:sh variable.sh
输出:
test
test version:1.1.1
our service name is testabc#加花括号是为了帮助识别变量的边界,建议加上
2.2 变量赋值
#!/usr/bin/env bash
SERVICE="test"
SERVICE="test_1" #重新赋值
echo $SERVICE
XX=$SERVICE #新变量 使用变量,注意写$
echo $XX
输出:test_1
2.2 只读变量
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。
readonly 变量名
2.3 删除变量
unset命令
unset 变量名
2.4 环境变量
shell脚本也可以定义环境变量。
#!/usr/bin/env bash
export PATH=/opt/compiler/gcc-8.2/bin:$PATH
3.shell字符串
双引号、单引号、不用引号都可。
#!/usr/bin/env bash
name="golang"
str="$name,start!!" #拼接
echo $str
输出:golang,start!!
4.shell数组
bash支持一维数组不支持多维,并且没有限定数组的大小。
#!/usr/bin/env bash
fruit=(banana chelizi caomei ganzhe)
echo ${fruit[@]} #打印所有元素
echo ${fruit[0]} #打印0号元素
echo ${#fruit[@]} #取数组元素的个数
echo ${#fruit[0]} #取某个元素(0号元素)的长度
输出:
banana chelizi caomei ganzhe
banana
4
6
5.传递给脚本的参数
#!/usr/bin/env bash
echo $0 #执行的文件名
echo $$ #脚本运行的当前进程ID号
echo $# #传给脚本的参数个数
echo $@ #传给脚本的参数
运行sh param.sh a b
输出:
param.sh
31011
2
a b
6.运算符
6.1关系运算符
跟语言的不太一样。
只支持数字。
- -eq 两个数是否相等,也可用 ==
- -ne 不相等,也可用 !=
- -gt 大于
- -lt 小于
- -ge 大于等于
- -le 小于等于
eg.[ $a -le $b ]
成立则返回true
6.2 算术运算符
加减乘除取余:
+ - \* / %
6.3 逻辑运算符
&& and
|| or
6.4 布尔运算符
!非运算
-o 或
-a 与
7.if…else for while…
sh的流程控制不可为空。
8.$()
在 bash shell 中,$()
是将括号内命令的执行结果赋值给变量.
deployDir=$(pwd)
注意区别${}
#!/usr/bin/env bash
a=10
b=${a} ${a}是使用变量
9.shell正则表达式
10.函数
11.shell特殊变量
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n是数字,$1代表第1个参数,$2代表第2个参数 |
$# | 传递给脚本或函数的所有参数的个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数。用双引号包含时,与$*稍有不同 。一个是一行一行的打印,一个是… |
$? | 上一个命令的退出状态,或者函数的返回值 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID |