够用的 shell 脚本

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

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

这里简单讲几个点

0 shell 适用于什么情况?

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

1 获得参数

1
$ example_command  1 2 3

 

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

在程序中可以这样获取

 

1
2
3
4
5
6
7
8
# 命令本身,即: example_command
echo $0
# 1
echo $1
# 2
echo $2
# 3
echo $3

  

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

也是类似!

1
2
3
4
5
function_call () {
    echo $1
}
 
function_call "call function"  

 

2 如何模块化

借助 source 命令

1
2
3
4
5
6
7
8
9
10
11
# a.sh
 
function function_a() {
    echo 'a'<br>    # 函数内部变量尽量使用 local 关键字,作用域能够限制在当前函数中<br>    local b=1
}
 
 
# b.sh
source a.sh
 
function_a

 

3 提示是否继续

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 命令输出示例:

1
2
3
4
5
6
7
# a.sh
set -x
a='aaaaaaaa'
echo $@
echo "$@"
echo $*
echo "$*"

 

 

5 计算

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

但是这里只说一种

那就是双括号的形式

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

  

6 shell 判断

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

比如:

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

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

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

 

posted @   吴丹阳-V  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示