目录
一.运行方式
二.编程习惯
三.变量
3.1变量的命名
3.3普通变量(局部变量)
3.4特殊变量
3.5变量子串
3.6变量赋值
四.运算方式
4.1$(( ))
4.2let
4.3expr
4.4bc(小数运算)
4.5$[ ]
4.6awk
4.7总结运算方式
五.条件测试语句
5.1文件
5.2条件测试表达式
5.3字符串
一.运行方式
方式一 | 方式二 | 方式三 | 方式四 | 方式五 |
sh test.sh | bash test.sh | chmod a+x ./test.sh | . test.sh | source test.sh |
二.编程习惯
- 在脚本中尽量不用中文
- 脚本名见名知意
- 编写流程控制语句时,先将结构写出来
三.变量
3.1变量的命名
- 变量不能以数字开始
- 多个单词通过_连接
3.2环境变量(全局变量)
由系统定义的变量,用大写字母表示
PATH:当你输入一个命令时,系统会在PATH中定义的目录中查找该命令的可执行文件 |
HOME:指定当前用户的主目录路径 |
USER:当前用户的用户名 |
查看环境变量:echo $PATH
3.3普通变量(局部变量)
定义示例:变量名=变量值
注意:变量名和值之间没有空格
示例:
a="中国"
3.4特殊变量
$0 | 脚本的名称 |
$n | 脚本的第几个参数 |
$# | 脚本的参数个数 |
$* | 取出所有的参数,添加双引号时,整个整体作为一个参数 |
$@ | 取出所有的参数,添加双引号时,每个参数作为独立的参数 |
$? |
前一个命令的返回状态码 $?=0 ==>成功执行前一条命令,$?!=0反之
|
$$ |
返回本程序的进程
ID
(
PID
),不常用
|
$! |
获取上一个在后台工作的进程的进程号,不常用
|
$_ |
保存之前执行的命令的最后一个参数,不常用
|
注意:当$n中n>=10时,需改成${10},${11}的形式
3.5变量子串
统计字符数方法:
方式一:
[root@serverc ~]# name="mkhfe"
[root@serverc ~]# echo $name
mkhfe
[root@serverc ~]# echo ${#name}
5
方式二:
[root@serverc ~]# echo $name | wc -L
5
方式三:
[root@serverc ~]# echo $name | awk '{print length()}'
5
子串截取:
方式一:
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5} #从指定位置截取到末尾
f jhy
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5:3} #从指定位置截取到指定的长度位置
f j
方式二:
[root@serverc ~]# echo $text | cut -c 1-4
huek
3.6变量赋值
1.直接赋值
var=a
2.引用其他命令结果赋值
ip=`date'
或
ip=$(date)
3.交互式变量赋值
read -p "a number" number
4.脚本传参赋值
$1 $2 $3
四.运算方式
4.1$(( ))
[root@serverc ~]# c=$((1+2))
[root@serverc ~]# echo $c
3
4.2let
[root@serverc ~]# let c=1+2
[root@serverc ~]# echo $c
3
4.3expr
[root@serverc ~]# expr 1 + 2
3
[root@serverc ~]# expr 1 \* 2
2
注意:
- 乘法运算时需要加转义符,因为*会被识别为通配符
- 运算的符号两边存在一个空格
4.4bc(小数运算)
[root@serverc ~]# echo 4/3 |bc -l
1.33333333333333333333
4.5$[ ]
[root@serverc ~]# echo $[1+2]
3
4.6awk
[root@serverc ~]# awk 'BEGIN{print 1/3 3/7}'
0.3333330.428571
#传参方式
[root@serverc ~]# x=1
[root@serverc ~]# y=2
[root@serverc ~]# awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
3
4.7总结运算方式
bc, awk可用于小数运算,其余方式只能进行整数运算
五.条件测试语句
5.1文件
[root@serverc ~]# [ -d /etc ];echo $?
0
[root@serverc ~]# [ -f /etc/hosts ];echo $?
0
[root@serverc ~]# [ -e /etc/passwd ];echo $?
0
5.2条件测试表达式
[ "$num" -eq 1 ] && {
echo 1
exit 0
}
[ "$num" -eq 2 ] && {
echo 2
exit 0
}