sleep


作用



睡眠一段时间



格式



sleep [--help] [--version] number[smhd]



参数



参数



含义



--help



显示辅助讯息                             



--version



显示版本编号                           



number



时间长度,可为小数。后面可接 s、m、h 或 d。

其中 s 为秒,m 为 分钟,h 为小时,d 为日数 。 



示例



sleep 5



睡眠5s。

date;sleep 5;date;

结果:

2019年 10月 23日 星期三 14:38:07 CST

2019年 10月 23日 星期三 14:38:12 CST



sleep 0.1m



睡眠0.1分钟(6s)。

date;sleep 0.1m;date;

结果:

2019年 10月 23日 星期三 14:38:44 CST

2019年 10月 23日 星期三 14:38:50 CST



sleep 1m 20s



睡眠1分钟20秒。



sleep 0.001h



睡眠0.001小时(3.6秒)

date;sleep 0.001h;date;

结果:

2019年 10月 23日 星期三 14:40:23 CST

2019年 10月 23日 星期三 14:40:26 CST


sed

awk/gawk

BOOT_MEDIA_TYPE=`awk 'BEGIN{RS=" ";FS="="}/flash_type/{print $2}' /proc/cmdline`

exec

作用

      用指定命令替换shell进程

详解

         不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。

        因此,如果你在一个shell里面,执行exec ls那么,当列出了当前目录后,这个shell就自己退出了,因为这个shell进程已被替换为仅仅执行ls命令的一个进程,执行结束自然也就退出了。

        为了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面(假设为a.sh),用主脚本调用这个脚本,调用点处可以用bash a.sh,这样会为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。

        source命令或者”.”,不会为脚本新建shell,而只是将脚本包含的命令在当前shell执行。

        不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。

文件描述符在/proc/PID/ 目录下。可用ls -l /proc/PID/....  来查看描述符指向。

exec fd<file  : 以文件描述符fd打开文件

exec fd>file  :以文件描述符fd打开文件file作为输出

示例:

exec 5</dev/buttons     //以文件描述符5打开/dev/buttons设备节点

exec 5<&-               //关闭文件描述符5对应的设备节点

exec 1</dev/tty1        //将标准输入改为/dev/tty1

exec还可用于标准输入、标准输出的重定向,见:

​shell脚本屏蔽输出​​     《Linux命令行与shell脚本编程大全》=>15.2.2

read

其他网址:​​https://man.linuxde.net/read​


作用



    用于从标准输入读取单行数值。当使用重定向的时候,可以读取文件中的一行数据。



格式



read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]



选项



选项



含义



-a



后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。



-d



后面跟一个标志符,只有其后的第一个字符有用,作为结束输入行的标志。



-p



后面跟提示信息,即在输入前打印提示信息。

例如:

read -p "输入网站名:" website

echo "你输入的网站名是 $website"

exit 0


执行结果

输入网站名:www.runoob.com

你输入的网站名是 www.runoob.com



-e



在输入的时候可以使用命令补全功能。



-n



后跟一个数字,定义输入文本的长度。

例如:

只接收 2 个输入就退出:

#!/bin/bash

read -n2 -p "请随便输入两个字符: " any

echo "\n您输入的两个字符是:$any"

exit 0


执行程序输入两个字符:

请随便输入两个字符: 12

您输入的两个字符是:12



-r



屏蔽\。如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。



-s



    安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色。

例如:

#!/bin/bash

read  -s  -p "请输入您的密码:" pass

echo "\n您输入的密码是 $pass"

exit 0


执行程序输入密码后是不显示的:

请输入您的密码:

您输入的密码是 runoob



-t



后面跟秒数,定义输入字符的等待时间。当计时满时,read命令返回一个非零退出状态。

例如:

if read -t 5 -p "输入网站名:" website

then

    echo "你输入的网站名是 $website"

else

    echo "\n抱歉,你输入超时了。"

fi

exit 0


执行程序不输入,等待 5 秒后:

输入网站名:

抱歉,你输入超时了



-u



后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。



示例



1、简单读取

#!/bin/bash  

echo "输入网站名: "  

read website  

echo "你输入的网站名是 $website"  

exit 0  #退出


测试结果为:

输入网站名:

www.runoob.com

你输入的网站名是 ​​www.runoob.com​


2.读取文件

    每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。

通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。


cat test.txt :

123

456

runoob


测试代码:

#!/bin/bash

count=1    # 赋值语句,不加空格

cat test.txt | while read line      # cat 命令的输出作为read命令的输入,read读到>的值放在line中

do

   echo "Line $count:$line"

   count=$[ $count + 1 ]          # 注意中括号中的空格。

done

echo "finish"

exit 0


执行结果为:

Line 1:123

Line 2:456

Line 3:runoob

finish


使用 -e 参数,以下实例输入字符 a 后按下 Tab 键就会输出相关的文件名(该目录/文件 存在的):

$ read -e -p "输入文件名:" str

输入文件名:a

a.out    a.py     a.pyc    abc.txt  


tr


作用



从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备



格式



tr [-cdst][--help][--version][SET1][SET2]

SET1:第一字符集   SET2:第二字符集



选项



选项



含义



-c, --complement



反选设定字符。也就是符合 SET1 的部份不做处理,不符合的部分才进行转换。



-d, --delete



删除指定字符



-s, --squeeze-repeats



缩减连续重复的字符成指定的单个字符



-t, --truncate-set1



削减 SET1 指定范围,使之与 SET2 设定长度相等



--help



显示程序用法信息



--version



显示程序本身的版本信息



字符集合范围



\NNN



八进制值的字符 NNN (1 to 3 为八进制值的字符)



\\



反斜杠



\a Ctrl-G



铃声      



\b Ctrl-H



退格符    



\f Ctrl-L



走行换页  



\n Ctrl-J



新行      



\r Ctrl-M



回车      



\t Ctrl-I



tab键     



\v Ctrl-X



水平制表符



CHAR1-CHAR2



字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。

例如:’A-Z’、’a-z’、'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。



[CHAR*]



SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止



[CHAR*REPEAT]



SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)



[:alnum:]



所有字母字符与数字            



[:alpha:]



所有字母字符                  



[:blank:]



所有水平空格                  



[:cntrl:]



所有控制字符                  



[:digit:]



所有数字                      



[:graph:]



所有可打印的字符(不包含空格符)



[:lower:]



所有小写字母                  



[:print:]



所有可打印的字符(包含空格符)  



[:punct:]



所有标点字符                  



[:space:]



所有水平与垂直空格符          



[:upper:]



所有大写字母                  



[:xdigit:]



所有 16 进位制的数字



[=CHAR=]



所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)



示例



将输入字符由大写转换为小写



echo “HELLO WORLD” | tr 'A-Z' 'a-z'  或者echo “HELLO WORLD” | '[:lower:]' '[:upper:]'

运行结果:hello world



使用tr删除字符



echo "hello 123 world 456" | tr -d '0-9'

运行结果:hello  world



将制表符转换为空格



cat text | tr '\t' ' '



删除不在子集中的所有字符



echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'

运行结果: 1  2  3  4

    此例中,补集中包含了数字0~9、空格和换行符\n,所以没有被删除,其他字符全部被删除了



压缩输入中重复的字符



echo "thissss is      a text linnnnnnne." | tr -s ' sn'

运行结果:this is a text line.



数字相加操作



echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]



删除Windows文件“造成”的'^M'字符



cat file | tr -s "\r" "\n" > new_file

cat file | tr -d "\r" > new_file