shell脚本常用语法函数总结(一)
1. 按格式输出date
echo $(date '+%Y-%m-%d %H:%M:%S.%N')
2. tee命令
作用:双向输出 (屏幕输出|文件输出)
用途:多路径输出
使用:
命令(比如 echo "hello world") | tee 选项 filename
选项说明: -a:双向追加重定向 #l 注意:tee命令从标准输入读取并写入标准输出和文件,即:双向覆盖重定向
不加 -a是覆盖输入。 加 -a是追加输入。
filename不存在会新建文件。
3. 输出重定向
参考: linux输出重定向
标准输入设备为 键盘, 标准输出设备为显示器。
linux中的文件描述符:linux中用0代表标准输入,1代表标准正确输出,2代表标准错误输出
正常输出是把内容输出到显示器上,而输出重定向是把内容输出到文件中
(1)标准输出到文件
命令 > [文件] 以覆盖的方式, 将命令的正确输出结果指定到文件
命令 >> [文件] 以追加的方式, 将命令的正确输出结果指定到文件
(2) 标准错误输出重定向
[错误命令] 2>[文件] 以覆盖的方式, 将命令的错误输出结果指定到文件
[错误命令] 2>>[文件] 以追加的方式, 将命令的错误输出结果指定到文件
注意:2>/dev/null 标准错误重定向到/dev/null中
/dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。
所以,2>/dev/null的意思就是将标准错误stderr删掉。
(3)正确输出和错误输出同时保存
[命令] &> [文件] 以覆盖的方式, 将命令正确和错误输出结果指定到文件中
[命令] > [文件] 2>&1 同上
[命令] > [文件1] 2>[文件2] 将正确输出覆盖入文件1, 将错误输出覆盖入文件2
4. mysql -BNe 批量执行语句, 结果中不输出列名
-B ,--batch Disable interactive behavior. 没有交互行为
-N ,--skip-column-names Don't write column names in results. 结果中不输出列名
-e, --execute=name Execute command 执行命令
5. $? 指上个命令的退出状态 或函数的返回值
if [ $? -ne 0 ]
then
#脚本不正常退出
exit 1
fi
6.command | while read line
do
…
done
command命令的输出作为read循环的输入,逐行读取command命令的输出。这种结构常用于处理超过一行的输出.
7. shell特殊变量及其含义。
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名。 |
$n(n≥1) | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,我们将在《Shell $*和$@的区别》一节中详细讲解。 |
$? | 上个命令的退出状态,或函数的返回值,我们将在《Shell $?》一节中详细讲解。 |
$$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
8. awk '{print $NF}'
$NF 表示 匹配模式到最后值(默认间隔符是空格,也可以通过-F指定)
NF 表示 匹配的行有多少列(默认间隔符是空格,也可以通过-F指定)
awk '{print $1}' 表示打印第一列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?