Shell笔记

1.验证参数个数是否正确

[ $# -ne 2 -a $# -ne 3 ] && echo "参数错误" || echo $@

  解释: $#: 表示参数的个数

           -a :  表示的意思,这里表示参数个数不等于2,并且也不等于3 

           $@:  表示所有参数,区别于$*

2.将输入字母全部转换为大写

echo $1|tr '[a-z]' '[A-Z]'

   解释:tr命令的使用,替换

3.验证上条命令执行是否成功

[ $? -ne 0 ]   &&  echo "上条命令执行不成功"

    解释: $? :表示返回上条命令执行的结果。正确返回0,错误不为0。

            此处如果$?不为0,说明上条命令执行不成功。

4.grep命令

grep [-acinv] [--color=auto] '搜寻字符串' filename

 选项与参数:

     -a : 将binary文件以text文件的方式搜寻数据

     -c : 计算找到'搜寻字符串'的次数

     -i : 忽略大小写

     -n: 顺便输出行号

     -v: 反向选择,即不满足条件的

     -w :只显示全字符合的列

     --color=auto :可以将找到的关键字加上颜色

5.mv命令

mv [options] source dest

  -i :若指定目录已有同名文件,则先询问是否覆盖旧文件;

  -f:在mv操作要覆盖某已有的目标文件时不给任何指示;

6.awk命

  awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk '{pattern + action}' {filenames}

  尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。  

 awk命令详解

7.sort命令

[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思

 sort命令详解

#!/bin/bash
#给log日志时间定义别名
alias dt="date +%Y/%m/%d' '%H:%M:%S"

#使别名在shell中起作用
shopt -s  expand_aliases

#测试
dt

#测试脚本输入个数是否正确
[ ! $# -eq 1 ] && echo "`dt` :脚本输入参数错误,程序退出" && exit -1
echo "`dt`:你输入的日期参数为$@"

today=$1

#年
year=`expr substr ${today} 1 4`
echo "`dt`:当前年份是:${year}"
#月
month=`expr substr ${today} 5 2`
echo "`dt`:当前月份是:${month}"
#日
day=`expr substr ${today} 7 2`
echo "`dt`:当前日号是:${day}"

#日期号
date_today=${year}-${month}-${day}
echo "`dt`:当前日期为:${date_today}"

#当前月的第一天
curr_month_begin=${year}${month}01
echo "`dt`:当前月的第一天为:${curr_month_begin}"

#上月的第一天
last_month_begin=`date -d "-1 months ${curr_month_begin}" "+%Y%m%d"`
echo "`dt`:上月的第一天为:${last_month_begin}" 

#平年默认为0,闰年为1
if_com=0
#判断平年还是闰年
echo "`dt`:当前年份是:${year}"
if [ ! `expr ${year} % 400` -eq 0 ]
then
   echo "${year}不是400的倍数,继续判断是不是100的倍数"
   if [ ! `expr ${year} % 100` -eq 0 ]
   then
      echo "`dt`:${year}不能被100整除"
      if [ `expr ${year} % 4` -eq 0 ]
      then
         echo "`dt`:${year}不能被100整除,能被4整除,是闰年"
         if_com=1
      else
         echo "`dt`:${year}不能被100整除,不能被4整除,是平年"
      fi 
   else
      echo "${year}能被一百整除,并且不能被400整除,是平年"
   fi
else
   echo "${year}是400的倍数,是闰年"
   if_com=1
fi

if [ ${if_com} -eq  0 ]
then
echo "${year}是平年"
else
echo "${year}是闰年"
fi

#月份判段

在线更新时间

rdate -s time.nist.gov

可以在crontab 中每隔个星期一自动更新时间:

* * * * 1 rdate -s time.nist.gov
原文地址:https://www.cnblogs.com/Jims2016/p/6053091.html