如何编写一个优雅的Shell脚本(一)

简介

   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)
  
是一个文件描述符,表示标准错误(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

当前回鹘执行方式与其他两种执行效果略有不同,

  1. 以上两种是新开一个进程去执行脚本程序,脚本执行完后,里面的变量和函数也跟着被销毁。
  2. 当前会话方式执行,执行完后,脚本程序里面的变量和函数保存在当前会话,当前会话可以访问脚本程序里面的一切。它的变量和函数的生命周期和当前会话共存亡。

猜你喜欢

转载自blog.csdn.net/IT_xhf/article/details/83711461