您的位置:首页 > 运维架构 > Shell

够用的 shell 脚本

2020-10-15 23:38 1201 查看

shell 脚本随处可见,甚至有些项目就是由 shell 脚本组成的

如果你想使用 shell 脚本自动化执行流程,或者看懂 shell 脚本,需要哪些知识呢

这里简单讲几个点

0 shell 适用于什么情况?

  1. 小工具
  2. 包装脚本编译代码
  3. 调用其他高级语言(调度)
  4. 少量的数据处理

1 获得参数

$ example_command  1 2 3

 

在执行命令后面加了三个参数

在程序中可以这样获取

 

# 命令本身,即: example_command
echo $0
# 1
echo $1
# 2
echo $2
# 3
echo $3

  

如果是一个 shell 函数要获取参数呢?

也是类似!

function_call () {
echo $1
}

function_call "call function"  

 

2 如何模块化

借助 source 命令

# a.sh

function function_a() {
echo 'a'
# 函数内部变量尽量使用 local 关键字,作用域能够限制在当前函数中
local b=1 } # b.sh source a.sh function_a

 

3 提示是否继续

while true; do
read -r -p "Step $preStep done! Next Step is $nextStep. Are You Sure Continue? [Y/N] " input

case $input in
[yY][eE][sS] | [yY])
echo "Continue"
break
;;
[nN][oO] | [nN])
echo "opt exit, done."
exit 1
;;
*)
echo "Invalid input..."
;;
esac
done

  

如果不想输入错误一直提示,可以去掉 while 循环

 

4 调试 shell 脚本

  • 多加 echo ,输出有用信息
  • 使用 set -x 命令

set -x 命令输出示例:

# a.sh
set -x
a='aaaaaaaa'
echo $@
echo "$@"
echo $*
echo "$*"

 

 

5 计算

有几种方式可以在 shell 中计算

但是这里只说一种

那就是双括号的形式

# a.sh
# 双括号中不能使用 $n 表示变量
((n = 10 / 3))
echo $n

  

6 shell 判断

shell 的 test 提供了很多比较实用的比较方式

比如:

-e: 文件存在
-f: 文件存在并且是普通文件

停,如果全列出来就没意思了,只能是授之以鱼

通过命令 man test 可以看到更详细的判断语法

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: