用到的shell编程命令整理

以下包括:awk、xargs、nohup、sleep、history时间、date、sed、wc、expr、tee 

 

awk

例: ps -ef|grep java|grep flume|awk '{print $2;}'|xargs kill -9

讲解AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

  awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号

 

    $ awk '{print $1,$4}' log.txt
https://www.runoob.com/linux/linux-comm-awk.html

xargs

例: ps -ef|grep java|grep flume|awk '{print $2;}'|xargs kill -9

讲解xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具

xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

 

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

xargs 其他应用

假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:

# cat url-list.txt | xargs wget -c

https://www.runoob.com/linux/linux-comm-xargs.html

nohup

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

2>&1 解释:

将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。

  • 0 – stdin (standard input,标准输入)
  • 1 – stdout (standard output,标准输出)
  • 2 – stderr (standard error,标准错误输出)

sleep

sleep 1 ##睡眠1秒
sleep 1s ##睡眠1秒
sleep 1m ##睡眠1分
sleep 1h ##睡眠1小时

#!/bin/sh
/opt/tomcat/bin/shutdown.sh
sleep 3  #等3秒后执行下一条
/opt/tomcat/bin/startup.sh

history 增加时间显示

https://blog.csdn.net/hello_java_lcl/article/details/107337226

date

1.SHELL脚本 中date的使用

#(1)最简单的使用

echo "今天日期是: `date +%Y%m%d`"  

今天日期是:20180824

#(2)时间变量的使用

#!/bin/bash

echo "时间是:`date '+%Y%m%d %H:%M:%S'`"

echo "时间是:`date '+%Y-%m-%d %H:%M:%S'`"

时间是:20180824 08:11:17
时间是:2018-08-24 08:11:49

#(3)简单的shell脚本

#在当前目录下面创建当天日期的目录

##written by 2018-8-24

#!/bin/bash

guoch=`date +%Y%m%d`

mkdir ${guoch}

#(4)前一天的日期

#前一天的日期

#(今天是24号)

echo "`date -d "-1 day" +%d`"    

结果是:23

#前一小时

#当前是16点
echo "`date -d "-1 hour" +%H`"

结果是:15

#前一分钟

echo "`date -d "-1 min" +%M`"

#前一秒钟

echo "`date -d "-1 second" +%S`"

#(5)学习日期变量的简单应用

#!/bin/bash
##In this Script we will use variables
##Writen by 2018-08-24

d1=`date +%H:%M:%S`
echo "The Script begin at $d1"
echo "Now we will sleep 2s"
sleep 2  #休眠2秒
d2=`date +%H:%M:%S`
echo "The Script end at $d2"

 

功能:

#!/bin/bash
set -e
ret=$(cat ../tables_ruitong|wc -l) 

i=1

while [ $i -le $ret ]

do
        row=$(sed -n "$i,0p" ../tables_ruitong)

       ## do something

        i=`expr $i + 1`

done

 

sed

Linux sed 命令是利用脚本来处理文本文件

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

 例子:row=$(sed -n "$i,0p" tables_1)

查看行:$i--变量,$i,0p -- 变量数字代表的当前行

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息。

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

举例:

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
[root@www ~]# cat regular_express.txt 
runoob!
google!
taobao!
facebook!
zhihu-
weibo-

利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test:

[root@www ~]# sed -i '$a # This is a test' regular_express.txt
[root@www ~]# cat regular_express.txt 
runoob!
google!
taobao!
facebook!
zhihu-
weibo-
# This is a test

由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test

sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

 

wc

Linux wc命令用于计算字数

利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

语法

wc [-clw][--help][--version][文件...]

参数

  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 只显示行数。
  • -w或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

使用 wc统计,结果如下:

$ wc testfile           # testfile文件的统计信息  
3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 

其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。

如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:

wc testfile testfile_1 testfile_2   #统计三个文件的信息 

输出结果如下:

$ wc testfile testfile_1 testfile_2  #统计三个文件的信息  
3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708 

expr

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

语法

expr 表达式

表达式说明:

  • 用空格隔开每个项;
  • 用 / (反斜杠) 放在 shell 特定的字符前面;
  • 对包含空格和其他特殊字符的字符串要用引号括起来

实例

1、计算字串长度

> expr length “this is a test”
 14

2、抓取字串

> expr substr “this is a test” 3 5
is is

3、抓取第一个字符数字串出现的位置

> expr index "sarasara"  a
 2

4、整数运算

 > expr 14 % 9
 5
 > expr 10 + 10
 20
 > expr 1000 + 900
 1900
 > expr 30 / 3 / 2
 5
 > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
 90
 > expr 30 * 3
 expr: Syntax error

tee

Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

语法

tee [-ai][--help][--version][文件...]

参数

  • -a或--append  附加到既有文件的后面,而非覆盖它.
  • -i或--ignore-interrupts  忽略中断信号。
  • --help  在线帮助。
  • --version  显示版本信息。

举例:

sh $path/sqoopjob_delete.sh 2>&1 | tee -ai /home/huser/sh_starts/logs/rtdata-sqoop_upload_`date +\%Y\%m\%d`.log

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值