版权声明:本文为博主hanchao5272原创文章,转载请注明来源,并留下原文链接地址,谢谢! https://blog.csdn.net/hanchao5272/article/details/86562062
系列目录与参考文献传送门: shell入门学习笔记-序章
命令详解
admindeMacBook-Pro:myshell admin$ type cd
cd is a shell builtin
admindeMacBook-Pro:myshell admin$ type ifconfig
ifconfig is /sbin/ifconfig
admindeMacBook-Pro:myshell admin$ type ls
ls is hashed (/bin/ls)
admindeMacBook-Pro:myshell admin$ echo $PATH
/Users/admin/local/apache-maven-3.5.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mysql/bin
admindeMacBook-Pro:myshell admin$ cd /usr/bin
- 通过
type
来查看命令来源/类型。 - 内建命令执行速度相对快,因为执行内建命令相当于调用shell进程的一个函数。
- 外部命令执行速度相对慢,因为执行外部命令需要出发磁盘I/O,需要fork出单独的进程,然后退出进程。
命令 | 命令 | 命令 | 命令 | 命令 | 命令 |
---|---|---|---|---|---|
bash | : | . | [ | alias | bg |
break | builtin | cd | command | compgen | complete |
declare | dirs | disown | echo | enable | eval |
exit | export | fc | fg | getopts | hash |
history | jobs | kill | let | local | logout |
printf | pushd | pwd | read | readonly | return |
shift | shopt | source | suspend | test | times |
type | typeset | ulimit | umask | unalias | unset |
echo输出字符串
不换行输出
aadmindeMacBook-Pro:myshell admin$ echo -n "------"
------admindeMacBook-Pro:myshell admin$
admindeMacBook-Pro:myshell admin$ cat a.sh
#!/bin/bash
echo 521
echo 1314
echo !
echo "---------"
echo -n 521
echo -n 1314
echo !
admindeMacBook-Pro:myshell admin$ . a.sh
521
1314
!
---------
5211314!
- 通过
-n
参数使得echo输出完之后,不换行,所以会产生------admindeMacBook-Pro:myshell admin$
类型的效果。 - 建议最后一个echo不添加
-n
。
转义字符
admindeMacBook-Pro:myshell admin$ cat a.sh
#!/bin/bash
echo 521
echo 1314
echo !
echo "---------"
echo -e "521\c"
echo -e "1314\c"
echo !
admindeMacBook-Pro:myshell admin$ . a.sh
521
1314
!
---------
5211314!
- 通过
-e
参数,对转义字符进行转换。 - 通过
-e
和-c
结合使用,同样能够达到不换行的效果。
输出至文件
admindeMacBook-Pro:myshell admin$ echo hello > c.txt
admindeMacBook-Pro:myshell admin$ cat c.txt
hello
admindeMacBook-Pro:myshell admin$ echo world > c.txt
admindeMacBook-Pro:myshell admin$ cat c.txt
world
admindeMacBook-Pro:myshell admin$ echo hello >> c.txt
admindeMacBook-Pro:myshell admin$ cat c.txt
world
hello
>
覆盖。>>
追加。
printf格式化打印
序列 | 说明 |
---|---|
\a | 警告字符,通常为ASCII的BEL字符 |
\b | 后退 |
\c | 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 |
\f | 换页(formfeed) |
\n | 换行 |
\r | 回车(Carriage return) |
\t | 水平制表符 |
\v | 垂直制表符 |
\ | 一个字面上的反斜杠字符 |
\ddd | 表示1到3位数八进制值的字符。仅在格式字符串中有效 |
\0ddd | 表示1到3位的八进制值字符 |
admindeMacBook-Pro:myshell admin$ cat a.sh
#!/bin/bash
printf "%10s %-10s %5d %-5d %c %-4.2f %4.2f\n" "rightAlign" "leftAlign" 4321 1234 "hhh" 33.212 22.321
printf "%10s %-10s %5d %-5d %c %-4.2f %4.2f\n" "htAlign" "leftAl" 321 123 "hhh" 33.212 22.321
printf "%10s %-10s %5d %-5d %c %-4.2f %4.2f\n" "Align" "left" 321 123 "hhh" 33.212 22.321
admindeMacBook-Pro:myshell admin$ . a.sh
rightAlign leftAlign 4321 1234 h 33.21 22.32
htAlign leftAl 321 123 h 33.21 22.32
Align left 321 123 h 33.21 22.32
abcadmindeMacBook-Pro:myshell admin$ printf "%2s\n" "abc"
abc
admindeMacBook-Pro:myshell admin$ printf "%2s\n" 111
111
admindeMacBook-Pro:myshell admin$ printf "%2d\n" 111
111
admindeMacBook-Pro:myshell admin$ printf "%2d\n" "111"
111
admindeMacBook-Pro:myshell admin$ printf "%2.1f\n" 2.11
2.1
admindeMacBook-Pro:myshell admin$ printf "%2.1f\n" 22.11
22.1
%s - string
,%d - decimal
,%c - char
,%f - float
%10s
占位为10的字符串,不足补空格,超长全显示,默认向右对齐。%-10s
向左对齐。%4.2f
占位为7的浮点数,其中整数部分占位4,小数点后占位2。整数部分不足补空格,超长全显示,默认向右对齐。- 需要手动控制换行
\n
admindeMacBook-Pro:myshell admin$ printf "%c\n" abc
a
admindeMacBook-Pro:myshell admin$ printf "%1c\n" abc
a
admindeMacBook-Pro:myshell admin$ printf "%2c\n" abc
a
admindeMacBook-Pro:myshell admin$ printf "%3c\n" abc
a
admindeMacBook-Pro:myshell admin$ printf "%-3c----\n" abc
a ----
%c
只会截取字符串的第一个字符。%c
的长度参数作用:截取的字符处于第几个位置。
admindeMacBook-Pro:myshell admin$ printf "%2.2f\n" 11.1111 22.2222 33.333
11.11
22.22
33.33
admindeMacBook-Pro:myshell admin$ printf "%s %s\n" a a b b c
a a
b b
c
admindeMacBook-Pro:myshell admin$ printf "%s-%c-%d-%f\n"
--0-0.000000
- 多余的参数仍会按照格式输出。
- 如果没有参数,则
%s
与%c
按照null输出,%d
按照0
输出,%f
按照0.000000
输出。