够用的 shell 脚本

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 可以看到更详细的判断语法

原文地址:https://www.cnblogs.com/wudanyang/p/13823722.html