本文共 4615 字,大约阅读时间需要 15 分钟。
作用 | 睡眠一段时间 |
格式 | 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 |
BOOT_MEDIA_TYPE=`awk 'BEGIN{RS=" ";FS="="}/flash_type/{print $2}' /proc/cmdline`
作用
用指定命令替换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/tty1exec还可用于标准输入、标准输出的重定向,见:
《Linux命令行与shell脚本编程大全》=>15.2.2其他网址:
作用 | 用于从标准输入读取单行数值。当使用重定向的时候,可以读取文件中的一行数据。 |
格式 | 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 你输入的网站名是
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 [-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 |
转载地址:http://kmvjz.baihongyu.com/