当前位置:网站首页>如何编写一个优雅的Shell脚本(一)
如何编写一个优雅的Shell脚本(一)
2022-08-05 05:14:00 【IT_xhf】
简介
shell脚本是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,本文简述如何编写一个优雅的shell脚本。
使用技术介绍
eval命令
可以将一个字符串当作一个命令执行。
CMD="ls -ltr"
eval $CMD内置参数变量
$$
获取当前程序进程ID。
$#
获取当前程序传入的参数个数,可以使用该内置变量对程序参数做判断。
$?
获取上一个命令执行返回的结果码,结果码等于0表示上一个命令执行成功,其他表示命令执行失败。
echo
将内容输出到终端的命令,再shell脚本里面,使用该命令常常用于日志的打印和输出终端的控制。可以使用>和>>来重定向到其他文件里。
echo "这里是我要输出文件的内容"
echo "我可以把输出内容以覆盖的方式重定向到文件里面" > 文件
echo "我可以把输出内容以追加的方式重定向到文件里面" >> 文件
关于重定向
上面echo已经讲过重定向的两个操作符>和>>,默认情况下这两个操作符只对标准输出(stdout)。在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是:
0 是一个文件描述符,表示标准输入(stdin)
1 是一个文件描述符,表示标准输出(stdout)
2 是一个文件描述符,表示标准错误(stderr)
如果要捕获错误输出,需要做如下修改
echo "默认标准输出" > 文件
echo "功能和以上命令一样" 1> 文件
echo "标准输出和错误输出都捕获到" 1>&2 文件
除了>和>>可以重定向意外,还有一个命令可以重定向输出到文件中,它就是tee。
#无参数
echo "只输出到标准输出,因为没有指定文件嘛。" | tee
#带文件参数
echo "输出到标准输出的同时,保存到文件file中。如果文件不存在,则创建;如果已经存在,则覆盖之"|tee file
#tee -a 选项
echo "输出到标准输出的同时,追加到文件file中。如果文件不存在,则创建;如果已经存在,就在末尾追加内容,而不是覆盖。"|tee -a file
#tee - 选项
echo "输出到标准输出两次。"|tee -
# 输出到标准输出两次,同时输出到文件
echo "输出到标准输出两次,同时保存到file1和file2中。"|tee file1 file2 -
自定义函数
#语法,与java和c++不同,函数的参数不需要写在括号里面,参数通过内置变量,$1,$2
function function_name() {
#参数1 $1
#参数2 $2
...
}
运行方式
- 最普通和常用的脚本执行方式
sh /path/program.sh- 有执行权限的脚本,也可以使用以下方式执行
/path/programe.sh- 当前会话方式执行
#当前会话执行方式有两种
. /path/program.sh
source /path/program.sh当前回鹘执行方式与其他两种执行效果略有不同,
- 以上两种是新开一个进程去执行脚本程序,脚本执行完后,里面的变量和函数也跟着被销毁。
- 当前会话方式执行,执行完后,脚本程序里面的变量和函数保存在当前会话,当前会话可以访问脚本程序里面的一切。它的变量和函数的生命周期和当前会话共存亡。
边栏推荐
- 数据库期末考试,选择、判断、填空题汇总
- 2022 Hangzhou Electric Multi-School 1st Session 01
- 【过一下10】sklearn使用记录
- [Decoding tools] Some online tools for Bitcoin
- "PHP8 Beginner's Guide" A brief introduction to PHP
- OFDM Lecture 16 5 -Discrete Convolution, ISI and ICI on DMT/OFDM Systems
- 【过一下16】回顾一下七月
- day7-列表作业(1)
- CAP+BASE
- 【NFT开发】设计师无技术基础保姆级开发NFT教程在Opensea上全套开发一个NFT项目+构建Web3网站
猜你喜欢

Error creating bean with name 'configDataContextRefresher' defined in class path resource

解决:Unknown column ‘id‘ in ‘where clause‘ 问题

CAP+BASE

Flink EventTime和Watermarks案例分析

Lecture 3 Gradient Tutorial Gradient Descent and Stochastic Gradient Descent

SQL(二) —— join窗口函数视图
![[Go through 4] 09-10_Classic network analysis](/img/f2/e6e71869b8ab014cc1eea0537fc2e7.png)
[Go through 4] 09-10_Classic network analysis

flink项目开发-flink的scala shell命令行交互模式开发

数据库实验五 备份与恢复

解决端口占用问题
随机推荐
CAP+BASE
【读书】长期更新
浅谈Servlet生命周期
学习总结week2_5
转正菜鸟前进中的经验(废话)之谈 持续更新中... ...
flink中文文档-目录v1.4
【过一下7】全连接神经网络视频第一节的笔记
day6-列表作业
Calling Matlab configuration in pycharm: No module named 'matlab.engine'; 'matlab' is not a package
vscode+pytorch use experience record (personal record + irregular update)
【练一下1】糖尿病遗传风险检测挑战赛 【讯飞开放平台】
[Go through 9] Convolution
鼠标放上去变成销售效果
学习总结day5
关于基于若依框架的路由跳转
range函数作用
Returned object not currently part of this pool
[Software Exam System Architect] Software Architecture Design ③ Domain-Specific Software Architecture (DSSA)
【过一下11】随机森林和特征工程
Matplotlib(三)—— 实践