shell-常见命令与拓展
命令
: 命令,空命令,返回值为 1,相当于true的别名 while : 相当于 while true
. 命令,用于在当前shell中执行命令 通常,一个脚本执行一条外部命令或脚本程序时,会创建一个新的环境(一个子shell),(.)命令可以使脚本保持当前脚本执行,常用于设置当前脚本的环境变量
echo 命令,默认输出带换行的字符串,若不需要换行,使用echo -n 但不是所有的shell都支持
不换行的场合,建议用printf
eval 命令,在变量名前加 eval, 输出的是变量所存储的值
exit 命令,0表示执行成功 1-125可以被程序自定义使用, 126 文件不可执行 127 命令未找到 128及以上 出现一个信号
export 命令, 将作为它参数的变量导出到子shell中,并使之在子shell中有效。export将自己的参数创建为一个环境变量,而这个环境变量可以被当前脚本调用的其他脚本和程序看见
set -a 或 set -o all 命令将导出它之后声明的所有环境变量
expr 命令,将它的参数当做一个表达式来求值
printf 命令 语法 printf "format string" parameter1 parameter2 …
但格式化字符串不支持浮点数的输出,格式化字符串中除了%和\之外,所有的字符都按照原样输出
return 函数返回值,无return时,默认返回最后一条命令的退出码
set 命令,为shell设置参数变量,可以结合 $(…)进行参数分割 参数为字符串(不同参数间按照空格区分),通过
set $(…)
echo $2 可以取得第二个参数
set -x 让一个脚本程序跟踪显示它当前执行的命令
shift(参数前移) trap(响应按键中断) unset(从环境中删除变量或函数)
find 命令,搜索文件
find [path] [option] [tests] [actions]
grep 命令,在文件中搜索字符串,通用正则表达式解释器
grep [options] PATTERN [FILES]
(`…`)或 $(…)命令 捕获命令的执行,如果需要捕获一条命令的执行结果,并它用在shell脚本程序中
拓展
1.算数拓展
完成算数运算,使用$((…)) …表示要求值的表达式
2.参数拓展
处理要传入shell或脚本的参数 进行自动化的替代字符串(p60)
here文档
向一条命令传递输入的一种特殊方法,允许一条命令在获得输入数据时好像在读取一个文件或键盘
以<<开头 紧跟一个特殊的字符序列,改序列在文档末尾再次出现
cat <<!FUNKY!
hello
this is a here document
!FUNKY!
输出是
hello
this is a here document
shell调试
跟踪错误的主要方法是设置各种shell选项或使用echo来 显示变量内容
p63 表格2-21 在调用shell时加上命令行选项或使用set命令
命令行选项 |
set选项 |
说明 |
sh -n <script> |
set -o noexec set -n |
只检查语法错误,不执行命令 |
sh -v <script> |
set -o verbose set -v |
在执行命令前回显它们 |
sh -x <script> |
set -o xtrace set -x |
在处理完命令后回显它们 |
sh -u <script> |
set -o nounset set -u |
如果使用了未定义的变量,就给出出错消息 |