shell脚本的一些常用命令简介

2019-12-24  本文已影响0人  后端架构进阶

一、前言

什么是shell脚本
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。所以,shell脚本就是预先编写好用来操作linux的一种脚本语言。

二、基本规范和字符

1. 常见规范约束

2. 变量的命名规范

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。
== 等于 [ a ==b ] 返回 false。
!= 不等于 [ a !=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。 [ a -eqb ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ a -neb ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ a -gtb ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ a -ltb ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ a -geb ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ a -leb ] 返回 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。 [ a -lt 20 -ob -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ a -lt 20 -ab -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。 [ a =b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ a !=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

image.png

注意:一定要记得这个空格,不然有问题

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
上一篇下一篇

猜你喜欢

热点阅读