shell的输入输出

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
坚持原创技术分享,您的支持将鼓励我继续创作!