read
将信息传递给shell程序的重要方式之一
自标准输入读取行后,通过shell字段切割功能(IFS)进行切分。第一个单词复制给第一个变量,第二个单词复制给第二个变量,如果单词多余变量,则剩下的单词,全赋值给最后一个变量
例子
读取终端输入
name='zhangsan';printf "name is now '%s'. Enter new value:" $name;read name
读取所有值到多个变量中
#!/bin/bash
cat /etc/passwd |
while IFS=: read user pass other
do
echo $other
done
标注输出,标准错误输出(1表示标准输出,2表示错误输出)
标准输出到results,错误输出到error
make 1> results 2>error
make > results 2>error
标准输出到results,舍弃错误输出
make 1>results 2>/dev/null
make >results 2>/dev/null
标准输出和错误输出到results
make 2>&1 > results
printf
printf的转义序列
1.注意转义序列只在格式字符串中会被特别对待,在参数字符串的转义序列不会被解释,
2.当使用%b格式指示符,会解释参数字符串的转义序列,
3.无论是在格式字符串内还是在使用%b所打印的参数字符串里,大部分的转义序列都是被相同对待。
4.无论如何,\c与\0ddd只有搭配%b使用才有效,而\ddd只有在格式字符串里才会被解释)
序列 说明
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的
参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及
任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符
例子
printf "a string,no processing:<%s>\n" "A\nB"
printf "a string,no processing:<%b>\n" "A\nB"
printf格式指示符
项目 说明
%b 相对应的参数被视为含有要被处理的转义序列之字符串。
%c ASCII字符。显示相对应参数的第一个字符
%d, %i 十进制整数
%e 浮点格式
%E 浮点格式
%f 浮点格式
%g %e或%f转换,看哪一个较短,则删除结尾的零
%G %E或%f转换,看哪一个较短,则删除结尾的零
%o 不带正负号的八进制值
%s 字符串
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10至15
%X 不带正负号的十六进制值,使用A至F表示10至15
%% 字面意义的%
printf可指定输出字段的宽度及对齐操作(*flags width.precision format-specifier)
printf "|%-10s|\n" hello
printf "|%10s|\n" hello
精度的意义
转换 精度含义
%d,%i,%o,%u,%x,%X 要打印的最小位数。当值的位数小于此数字时,会在前面补零。默认精度(precision)为1
%e,%E 要打印的最小位数。当值的位数小于此数字时,会在小数点后面补零,默认精度为6.精度为0时则表示不显示小数点
%f 小数点右边的位数
%g,%G 有效位数(significant digit)的最大数目
%s 要打印字符的最大数目
例子
printf "%.5d\n" 15
printf "%.10s\n" “this is only test”
printf "%.2f\n" 12.12645
printf的标志
字符 意义
- 将字段里已格式化的值向左对齐
空白(space) 在正值前置一个空格,在复制前置一个负号
+ 总是在数值之前防止一个正号或负号
# %o有一个前置O,%x与%X有前置的Ox和OX,%e,%E与%f总在结果中又一个小数点,%g与%G位没有结尾的零
0 以零填补输出,而非空白
例子
printf "|%-10s| |%10s|\n" hello world
printf "|% d| |% d|\n" 15 -15
printf "%+d %+d\n" 15 -15
printf "%x %#x\n" 15 -15
printf "%05d\n" 15