Linux(六)shell操作实用技巧

一、shell操作日期时间

linux 系统为我们提供了一个命令 date,专门用来显示或者设置系统日期时间的。
      语法格式为:
      date [OPTION]... [+FORMAT] 或者
      date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
      常用的可选项有:
      --help 显示辅助信息
      --version 显示 date 命令版本信息
      -u 显示目前的格林威治时间
      -d 做日期时间相关的运算
      --date=‘-dateStr‘ 做日期时间的相关运算

1、显示系统当前日期时间    date

以指定格式显示日期时间        date ‘+%Y-%m-%d %H:%M:%S‘

2、设置系统日期时间   date -s "2017-01-01 01:01"

3、 有时候,我们操作日期时间,经常会要获取前几天或者后几天的时间,那么 date 命令也 给我们提供了实现这个功能的可选项‘-d‘和-date,请看下面细细的例子

先看‘-d‘:
            ## 获取下一天的时间
                     date -d next-day ‘+%Y-%m-%d %H:%M:%S‘
                     date -d ‘next day‘ ‘+%Y-%m-%d %H:%M:%S‘
          另外一种写法:
                     date ‘+%Y-%m-%d %H:%M:%S‘ -d tomorrow
           ## 获取上一天的时间
                     date -d last-day ‘+%Y-%m-%d %H:%M:%S‘
          另外一种写法:
                     date ‘+%Y-%m-%d %H:%M:%S‘ -d yesterday

## 获取下一月的时间
                    date -d next-month ‘+%Y-%m-%d %H:%M:%S‘
           ## 获取上一月的时间      date -d last-month ‘+%Y-%m-%d %H:%M:%S‘
           ## 获取下一年的时间      date -d next-year ‘+%Y-%m-%d %H:%M:%S
           ## 获取上一年的时间       date -d last-year ‘+%Y-%m-%d %H:%M:%S‘
           ## 获取上一周的日期时间:     date -d next-week ‘+%Y-%m-%d %H:%M:%S‘
                                                     date -d next-monday ‘+%Y-%m-%d %H:%M:%S‘
                                                     date -d next-thursday ‘+%Y-%m-%d %H:%M:%S‘

那么类似的,其实, last-year, last-month, last-day, last-week, last-hour, last-minute, last-second 都有对应的实现。 相反的, last 对应 next,自己可以根据实际情况灵活组织
        接下来,我们来看‘-date‘, 它帮我实现任意时间前后的计算,来看具体的例子:
        ## 获取一天以后的日期时间     date ‘+%Y-%m-%d %H:%M:%S‘ --date=‘1 day‘

date ‘+%Y-%m-%d %H:%M:%S‘ --date=‘-1 day ago‘

## 获取一天以前的日期时间        date ‘+%Y-%m-%d %H:%M:%S‘ --date=‘-1 day‘
                                                   date ‘+%Y-%m-%d %H:%M:%S‘ --date=‘1 day ago‘
上面的例子显示出来了使用的格式,使用精髓在于改变前面的字符串显示格式,改变数 据,改变要操作的日期对应字段,除了天也有对应的其他实现: year, month, week, day, hour, minute, second, monday( 星期,七天都可)

4、 date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:
            使用范例: date ‘+%Y-%m-%d %H:%M:%S‘

日期方面:
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期和时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
时间方面:
% : 印出
% %n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%P : 显示本地 am 或 pm
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S %p
%Z : 显示时区
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss]
MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数

5、有用小技巧

## 获取相对某个日期前后的日期: date -d ‘may 14 -2 weeks‘
               ## 把时间当中无用的 0 去掉,比如: 01:02:25 会变成 1:2:25        date ‘+%-H:%-M:%-S‘
               ## 显示文件最后被更改的时间   date "+%Y-%m-%d %H:%M:%S" -r bin/removeJDK.sh
               ## 求两个字符串日期之间相隔的天数  expr ‘(‘ $(date +%s -d "2016-08-08") - $(date +%s -d "2016-09-09") ‘)‘ / 86400
               ## shell 中加减指定间隔单位
                            A=`date +%Y-%m-%d`
                            B=`date +%Y-%m-%d -d "$A +36 hours"`

二、shell操作字符串

Linux 中操作字符串,也是一项必备的技能。 其中尤以截取字符串更加频繁,下面为大家介 绍 10 种方式,截取字符串
      1、 #截取,删除左边字符串(包括制定的分隔符),保留右边字符串
            预先定义一个变量: WEBSITE=‘http://hadoop/centos/huangbo.html‘
           echo ${WEBSITE#*//}        结果: hadoop/centos/huangbo.html
      2、 ##截取,删除左边字符串( 包括指定的分隔符),保留右边字符串,和上边一个#不同的 是,它一直找到最后,而不是像一个#那样找到一个就满足条件退出了。
            echo ${WEBSITE##*//}     结果: huangbo.html
       3、 %截取,删除右边字符串(包括制定的分隔符),保留左边字符串
             echo ${WEBSITE%//*}     结果: http://hadoop//centos
        4、 %%截取,删除右边字符串( 包括指定的分隔符),保留左边字符串,和上边一个%不同 的是,它一直找到最前,而不是像一个%那样找到一个就满足条件退出了。

echo ${WEBSITE%%//*}          结果: http:
        5、 从左边第几个字符开始,以及截取的字符的个数           echo ${WEBSITE:2:2}        结果: tp
        6、 从左边第几个字符开始,一直到结束            echo ${WEBSITE:2}         结果: tp://hadoop//centos//huangbo.html
        7、 从右边第几个字符开始,以及字符的个数        echo ${WEBSITE:0-4:2}       结果: ht
        8、 从右边第几个字符开始,一直到结束          echo ${WEBSITE:0-4}         结果: html
        9、 利用 awk 进行字符串截取      echo $WEBSITE | awk ‘{print substr($1,2,6)}‘        结果: ttp://
        10、 利用 cut 进行字符串截取     echo $WEBSITE | cut -b 1-4     结果http
                                                    echo $WEBSITE | cut -c 1-4      结果http      
                                                    echo $WEBSITE | cut -b 1,4      结果 hp
                                                    echo $WEBSITE | cut -c 1,4      结果hp
三、Linux获取字符串长度

在此为大家提供五种方式获取某字符串的长度
     1、 使用 wc -L 命令
           echo ${WEBSITE} |wc -L         结果35
     2、 使用 expr 的方式去计算 
           expr length ${WEBSITE}         结果35
     3、 通过 awk + length 的方式获取字符串长度
           echo ${WEBSITE} | awk ‘{print length($0)}‘    结果35
     4、 通过 awk 的方式计算以""分隔的字段个数
           echo ${WEBSITE} |awk -F "" ‘{print NF}‘    结果35
     5、 通过#的方式获取字符串(最简单,最常用)
          echo ${#WEBSITE}        结果 35

时间: 2024-12-14 18:01:43

Linux(六)shell操作实用技巧的相关文章

linux 模仿shell操作

linux的文件系统,是把硬盘空间格式化为若干node和block数据块,一般文件的创建,目录的创建,都会占用一个node,如果创建的是文件,具体的数据保存在若干block数据块中,node记录数据块的号码,所有的node和block在文件系统中都已经编号好:如果创建的是目录,会占用一个node,一个block,block中记录着该目录中所有的文件名,block号码记录在node中. 根据linux文件系统的大体结构,用文件的方式,采用C++语言来模拟一些在shell中执行的命令:cd.mkdi

Linux下Vim的实用技巧

1.在编辑模式下: ctrl+w  撤销上次的编辑内容 2.在命令模式下: ctrl+w  光标切换到另一个窗口 3.vim -on file1 file2 -- 水平分屏,n是数字,代表分为几个屏幕,命令输入成功后,分成上下多个 屏幕. 4.ctrl+w+j 光标移动到下边那个屏幕, ctrl+w+k 光标移动到上边那个屏幕 ctrl+w+h  左移光标                          ctrl+w+l  右移光标 5.vim -On file1 file2 -- 垂直分屏,

【老鸟分享】LINUX命令行终端提示符多种实用技巧!

1.Linux命令行提示符简介 众所周知,Linux命令行是系统管理员管理Linux的重要手段,我们管理Linux,首先要面对的就是Linux命令行提示符. Linux命令行结尾的提示符有"#"和"$"两种不同的符号,如下所示: [[email protected] ~]# #<==这是超级管理员root用户对应的命令行. [[email protected] ~]$ #<==这是普通用户oldboy对应的命令行. 其中: 1)#号,是使用超级用户roo

LINUX命令行终端提示符多种实用技巧!

1.Linux命令行提示符简介 老男孩教育原创 众所周知,Linux命令行是系统管理员管理Linux的重要手段,我们管理Linux,首先要面对的就是Linux命令行提示符. Linux命令行结尾的提示符有"#"和"$"两种不同的符号,如下所示: [[email protected] ~]# #<==这是超级管理员root用户对应的命令行. [[email protected] ~]$ #<==这是普通用户oldboy对应的命令行. 其中: 1)#号,是使

让linux好用起来--操作使用技巧

让linux好用起来--操作使用技巧 1   概述 在一个初学者眼里,linux的 CLI 界面没有图形界面那样多彩和友好,会让人产生畏难心理,但是作为一个稍微进阶的linux玩家,自然会积累不少经验和技巧,来让linux越来越好用,越来越顺手,甚至会发出“摆脱了图形界面的束缚,整个人都更自由了”的感慨. 当然,我们所说的越来越好用,是有限定的领域内: 网络请求 文件切换 命令执行 程序开发 如果您不是开发人员,此文可能并不适合您阅读了. 2   设置环境变量 环境变量,故名思议,就是为当前操作

linux实用技巧:使用ntfs-3g挂载ntfs设备

1.几种文件系统的比较 (1)在linux系统中支持一下文件系统: Ext2         第二扩展文件系统(简称 ext2 或者 ext2) 很多年前就已经成为 GNU/Linux 默认的文件系统了.ext2 代替了扩展文件系统(这是 "第二代" 的前身).它纠正了它前身的一些错误并突破了一些限制.ext2 遵循了 UNIX? 类文件系统的一贯标准.ext2 从它出现的第一天起,就注定要在提供鲁棒性和高性能的同时演化. Ext3 第三扩展文件系统从名字上就可以看出是 ext2 的继

Linux Shell 编程实战技巧

目前,越来越多的企业应用会部署在 Linux 系统上的,而 Linux Shell 脚本可以极大地帮助我们完成这些应用的运维任务.这使得 Linux Shell 开发技能成为开发人员的一项重要的.有竞争力的技能.本文就笔者的实际开发经验,以 Korn Shell 为例分享了脚本开发中的常见问题及相关技巧. 避免定时任务脚本的常见问题 很多脚本在实际使用的时候往往是以定时任务的方式运行,而非手工运行.但是实现同样功能的脚本在这两种运行方式下可能遇到的问题不尽相同. 以定时任务方式运行的脚本往往会遇

linux实用技巧:检测内存泄漏工具Valgrind

1.Valgrind简介 1.在我们编写C/C++的时候,最常见的错误之一就是内存泄露,这样的问题其实跟程序员的编程习惯密不可分.如果你在申请内存空间之后能够马上在合适的位置释放内存.会极大程度的避免内存泄漏的情况.但是人非圣贤,孰能无过.有时候我们确实忘记释放内存而导致了比较严重的错误,所以这个时候我们需要借助valgrind这个工具来判断内存泄漏. Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(

linux在shell date获取时间的相关操作

获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数 获取明天的日期 date -d next-day +%Y%m%d 获取昨天的日期 date -d last-day +%Y%m%d 获取上个月的年和月 date -d last-month +%Y%m 获取下个月的年和月date -d next-month +%Y%m 获取明年