专栏首页浩Coding【程序猿硬核科普】Linux下Shell编程杂记

【程序猿硬核科普】Linux下Shell编程杂记

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

date日期格式化

1、各种date日期格式转换

格式:2020-02-24 11:50
代码:$(date +%Y-%m-%d)' '$(date +%H:%M)

格式:20200224115052
代码:$(date +%Y%m%d%H%M%S

实例:显示当前时间

命令:

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"  //显示后一天的日期
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
:%d
:wq

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/1120.html

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;
echo $number

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

`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/u010670689/article/details/45077177?utm_source=blogxgwz0

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

https://www.cnblogs.com/zqifa/p/linux-vim-4.html

祝君工作顺利,加油。

本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7),作者:浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 更新/修复Deepin启动(GRUB)

    相信很多人和我一样,主要用着Linux,但是玩游戏娱乐啥的或者一些图形化界面软件必须要用到Windows系统,这个时候就不得不装双系统了。

    浩Coding
  • Linux命令之Date——时间

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多...

    浩Coding
  • 每日一码(1)--验证码的生成和使用

    验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Huma...

    浩Coding
  • 前端-团队效率(二)代码规范

    // "javascript.suggest.autoImports": true,

    吴文周
  • Golang Leetcode 345. Reverse Vowels of a String.go

    版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89088919

    anakinsun
  • Sublime Text3 一些实用设置

    当你把脑袋扭过到显示器以外的地方后再回头看编辑器,光标呢?然后你可能会花点小功夫找到他,就像你平时找鼠标的时候。这个设置会让让光标所处在的那一行高亮,只是稍微亮...

    Daotin
  • JDBC URL 那些事儿

    JDBC是我们经常使用的,那URL中常用的那些参数你是否知道呢?本文梳理了常用的参数说明。

    问天丶天问
  • 羊皮书APP(Android版)开发系列(二十四)不常用但是很有用的两个属性:clipToPadding 和 clipChildren

    热心的程序员
  • 微信小程序版博客——列表页相关问题汇总

    首先是分页加载列表,从网上例子和文档来看有两种实现方式,一种是根据Page()上的 onReachBottom属性:页面上拉触底事件的处理函数,另一种就是通过s...

    Bug生活2048
  • 9 百万用户级游戏服务器架构设计

    所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可...

    范蠡

扫码关注云+社区

领取腾讯云代金券