一、前言
什么是shell脚本
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。所以,shell脚本就是预先编写好用来操作linux的一种脚本语言。
二、基本规范和字符
1. 常见规范约束
- shell一般以*.sh结束
- shell的编写一般以
#!/bin/sh
或者是#!bin/bash
开头,第一行就是这个
image.png
2. 变量的命名规范
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
3. 变量的定义和使用
#!/bin/sh
demoName="test"
echo $demoName
echo "我是测试的 ${demoName}1 "
echo "我是测试的 $demoName1"
注意:=前后不要有空格。
使用直接用美元符号$
即可,为了更直观的看出,强烈建议使用${}
,便于区分变量和参数,这是一直很好的编程习惯。下面的结果就很直观的看得出来。
输出结果:
test
我是测试的 test1
我是测试的
4. 字符串拼接
#!/bin/sh
demoName="test"
str='hello, '${demoName}''
echo $str
输出: hello, test
5. 字符串长度
#!/bin/sh
demoName="test"
echo ${#demoName}
输出: 4
6. 截取字符串
#!/bin/sh
demoName="test"
echo ${demoName:1:2}
输出:es
7. 查找字符出现的位置(哪个字母先出现就计算哪个)
#!/bin/sh
demoName="test"
echo `expr index ${demoName} se`
输出结果:2
8.注释
以 # 开头的行就是注释,会被解释器忽略。
#--------------------------------------------
# 这是一个注释
# author: yxb
# site:www.baidu.com
#--------------------------------------------
三、运算符
1. 算数运算符
假设a10 b=20
符号 | 说明 | 举例 |
---|---|---|
+ | 加号 |
expr $a + $b 结果为 30。 |
- | 减号 |
expr $a - $b 结果为 -10。 |
* | 乘 |
expr $a \* $b 结果为 200。 |
/ | 除 |
expr $b / $a 结果为 2。 |
% | 取余 |
expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 等于 | [ b ] 返回 false。 |
!= | 不等于 | [ b ] 返回 true。 |
#!/bin/sh
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
2. 关系运算符
假设a10 b=20
符号 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ b ] 返回 true。 |
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
3. 布尔运算符
符号 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ b -gt 100 ] 返回 false。 |
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
4.逻辑运算符
&& 逻辑的AND
|| 逻辑的OR
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
5. 字符串运算符
符号 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n "$a" ] 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a 等于 b"
else
echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
echo "-z $a : 字符串长度为 0"
else
echo "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
then
echo "-n $a : 字符串长度不为 0"
else
echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
echo "$a : 字符串不为空"
else
echo "$a : 字符串为空"
fi
四、流程控制
1.if else
if condition
then
command1
command2
...
commandN
else
command
fi
2. if elif else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
五、时间date在脚本中的几个用法
1. 获取年月日时分秒周几
现在时间 2019-12-24 11:16:23 周二
date +%Y 以四位数字格式打印年份
2019
date +%y 以二位数字格式打印年份
19
date +%m 月份
12
date +%d 日期(几号)
24
date +%H 小时
11
date +%M 分钟
16
date +%S 秒
23
date +%w 星期,如果结果显示0,则表示周日
2
注意:一定要记得这个空格,不然有问题
2. 获取今天前n天或这后n天的时间
date -d "num params" +%p
num
: 前几或者后几 比如:-1
或者 3
params
参数的取值:year
month
day
hour
min
second
week
p
参数的取值:Y m d H M S w
当前时间:2019-12-24 11:37:23
date -d "-1 year" +%Y
结果:2018
date -d "1 month" +%m
结果:01
date -d "-1 day" +%d
结果:23
date -d "-1 hour" +%H
结果:10
date -d "-1 min" +%M
结果:36
date -d "-1 second" +%S
结果:22
网友评论