shell编程 之 echo命令和printf命令
1 echo命令基本情况:
echo显示普通字符:echo "i am studying shell"(有木有引号都可以)
支持转义字符:echo "\"hello\""(结果是”hello“)。
显示变量:echo "$name is my arguement", 注意read name 是一个特殊用法,相当于raw_input(), 当脚本文件中内容如下时候:
#!/bin/bash
read name #表示从脚本外获得name参数的内容
echo "$name is my arguement " #脚本外运行的时候,会要求先输入,再输出,我输入的是:hehe,得到hehe is my arguement.
特殊转义,比如\n换行,需要echo 加参数-e,echo -e " hello \n" (这样才有效),同理\c不换行,也是这样才有效 echo -e "hello \c"
显示结果定向至文件:echo " hello " >t2.sh(事先如果没有t2.sh,系统会新建一个,在当前目录)
输出原样的字符串,不进行转义:echo ’ hehe /n' ,直接用单引号就行,单引号不支持转义
echo后面可以叠套需要计算的小程序,但是需要用反引号表明。比如echo `date`,运行的时候会显示当前时间。反引号意思是返回当前执行命令的结果
2 printf命令
printf命令同样可以打印某些内容到显示器,但是据说比echo可操作性更强。
两者不同在于,printf支持某些格式化输出,不会自带换行符,比如:printf " hello how are u ?\n" 得到hello how are u
格式化输出,使用%s(字符串替代符),%d(十进制整数替代符),%f(浮点数替代符),%c(ascii码替代符,好像是)可以把后面的参数传递到printf中实现格式化输出,比如:
实例1:printf " get string %s and num %d \n" abc 123 edf 456
得到输出:get string abc and num 123
get string bcd and num 456 #即使参数数量多于替代符数量也没关系,不够的参数%s会用null补,%d会用0补。
实例2:printf "name:%-10s id:%-10d price:%-4.2f \n " apple 122 2.555 banana 123 8.123
得到输出:name:apple id:122 price:2.56
name:banana id:123 price:8.12
解析:%-10s的意思是:首先这是一个替代符,%s,-的意思是输出的时候左对齐,10的意思的为这个数据留出10个字符的空间,如果这个字符不到10位,那就添加空格,如果这个字符多于10位,那就原样输出。%d同理,%f中的.2表示四舍五入留小数点后两位就可以。
prinrf中的转义字符:就好像\n不仅仅是“\n"而是换行符一样,printf中还有很多字符有特殊含义:比如\\表示\,\t水平制表符,\v垂直制表符,\f换页...不多赘述。