本篇文章主要讲一些常用的Shell编程知识,包括:date日期格式化、清空文件内容、Shell字符串截取、Shell中使用运算符、RANDOM 随机数、强制对一个变量进行算术操作(加减)、特殊字符进行转义等等。

date日期格式化

1、各种date日期格式转换

格式:2020-02-24 11:50

实例:显示当前时间

命令:

date

date '+%c'

date '+%D'

date '+%x'

date '+%T'

date '+%X'

输出:

2、显示过去和未来的时间

date 命令的另一个扩展是 -d 选项,可以快速地查明一个特定的日期相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。

具体说明如下:

date -d '2 weeks' 2周后的日期

date -d 'next monday' (下周一的日期)

date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d

date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d

date +%Y%m%d --date="+1 day"  //显示后一天的日期

使用 ago 指令,您可以得到过去的日期:

date -d '30 days ago' (30天前的日期)

使用负数以得到相反的日期:

date -d 'dec 14 -2 weeks' (相对:dec 14这个日期的两周前的日期)

date -d '-100 days' (100天以前的日期)

date -d '50 days'(50天后的日期)

加减指定的天数/小时/分钟

在指定的日期上减去指定的天:
echo $(date -d "2020-02-24 11:50:18 3 days" +"%Y%m%d%H")
三天后:2020022711
​
在指定的日期上加上指定的小时:
echo $(date -d "2020-02-24 11:50:18 1 hour" +"%Y%m%d%H")
一小时后:2020022412
​
在指定的日期上减去指定的小时:
echo $(date -d "2020-02-24 11:50:18 -6 hour" +"%Y%m%d%H")
6小时前
​
在指定的日期上加上指定的分钟:
echo $(date -d "2020-02-24 11:50:18 10 minute" +"%Y%m%d%H")
十分钟后

参考文章:Linux命令之Date——时间

linux清空文件内容的三种方法

1.使用vi/vim命令打开文件后,输入"%d"清空 后保存即可。但当文件内容较大时,处理较慢,命令如下:

vim file_name

2.使用cat命令情况【推荐使用】,命令如下:

cat /dev/null > file_name

3.使用echo命令清空,此时会在文件中写入一个空行“\n",【注意,使用echo时候,>是清空文件后写入>>是追加写入】命令如下:

echo "">file_name

Shell字符串截取

字符串截取函数:

${string: start :length}

从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。

${string: start}

从 string 字符串的左边第 start 个字符开始截取,直到最后。

${string: 0-start :length}

从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。

${string: 0-start}

从 string 字符串的右边第 start 个字符开始截取,直到最后。

${string#*chars}

从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

${string##*chars}

从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。

${string%*chars}

从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

${string%%*chars}

从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

实例:

从字符串左边截取:第2个字符到第9个字符

url="c.biancheng.net"

echo ${url: 2: 9}

结果为biancheng

找到第一个*字符,截取右边所有字符

url="http://c.biancheng.net/index.html"

echo ${url#*:}

结果为//c.biancheng.net/index.html

推荐文章:

Shell字符串截取:http://c.biancheng.net/view/1...

Shell中使用运算符

关系运算符列表:

-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。

-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。

-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。

-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。

-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。

-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

布尔运算符列表:

! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。

-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。

-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

字符串运算符列表:

= 检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。

!= 检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。

-z 检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。

-n 检测字符串长度是否为0,不为0返回 true。[ -z $a ] 返回 true。

str 检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。

推荐文章:
shell脚本的简单使用:三—— 之运算符使用:
https://blog.csdn.net/iteye_8560/article/details/82681032

**RANDOM 随机数
**

在BASH环境下,这个RANDOM变量的内容是得到0~32767之间的随机数。

0~10之间的数值:

echo $(($RANDOM%10))

也可以利用 declare 宣告数值类型:

declare -i number=$RANDOM*100/32767;

强制对一个变量进行算术操作(加减)

`expr $variable - 1`

variable=3
variable=`expr $variable - 1`
echo $pos

特殊字符进行转义

在Shell中利用反斜线\给特殊符号进行转义【单引号和双引号会影响\的使用】,下面是例子:

[root@autoCheckIn]# echo *
autoCheckIn.log date.log lastDate.log test.sh
[root@autoCheckIn]# echo \*
*
[root@autoCheckIn]# echo $
$
[root@autoCheckIn]# echo $lastDate
2020-02-24 22:17
[root@autoCheckIn]# echo \$lastDate
$lastDate
[root@autoCheckIn]# 

参考文章:

1、shell脚本的简单使用:三—— 之运算符使用

https://blog.csdn.net/iteye_8560/article/details/82681032

2、linux shell 在指定日期上增加或者减去一小时或者一分钟

https://blog.csdn.net/u010670..._source=blogxgwz0

3、linux清空文件内容的三种方法

https://www.cnblogs.com/zqifa...

祝君工作顺利,加油。

    【程序猿硬核科普】系列是利用晚上闲暇时间在半小时到一小时之内完成的科普类型文章,有不明白的就去搜资料,学习完就做笔记,旨在克服拖延症。文章可能多有疏漏之处,敬请指正!


往期精彩回顾

【程序猿硬核科普】为什么固态硬盘删除数据后无法恢复 | 硬盘数据恢复软件 

【程序猿硬核科普】学习使用Markdown语法写博客

Linux命令之Crontab——定时任务

2020Java面试宝典 -- JavaSE基础篇


浩Coding
56 声望1 粉丝