• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > 让代码整洁、过程清晰的BASH Shell编程技巧

让代码整洁、过程清晰的BASH Shell编程技巧

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了bash shell,bash shell是什么,bash shell教程,win10 bash shell,linux bash shell等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这是我写BASH程序的招式。这里本没有什么新的内容,但是从我的经验来看,人们爱滥用BASH。他们忽略了计算机科学,而从他们的程序中创造的是“大泥球”(译注:指架构不清晰的软件系统)。

在此我告诉你方法,以保护你的程序免于障碍,并保持代码的整洁。

一、不可改变的全局变量

1.尽量少用全局变量
2.以大写命名
3.只读声明
4.用全局变量来代替隐晦的$0,$1等

在我的程序中常使用的全局变量:

readonly PROGNAME=$(basename $0)
readonly PROGDIR=$(readlink -m $(dirname $0))
readonly ARGS="$@"
</div>

二、一切皆是局部的

所有变量都应为局部的。
change_owner_of_file() {
    local filename=$1
    local user=$2
    local group=$3

    chown $user:$group $filename
}
change_owner_of_files() {
    local user=$1; shift
    local group=$1; shift
    local files=$@
    local i

    for i in $files
    do
        chown $user:$group $i
    done
}
</div>

1.自注释(self documenting)的参数
2.通常作为循环用的变量i,把它声明为局部变量是很重要的。
3.局部变量不作用于全局域。

kfir@goofy ~ $ local a
bash: local: can only be used in a function
</div>

三、main()

1.有助于保持所有变量的局部性
2.直观的函数式编程
3.代码中唯一的全局命令是:main
main() {
    local files="/tmp/a /tmp/b"
    local i

    for i in $files
    do
        change_owner_of_file kfir users $i
    done
}
main
</div>

四、一切皆是函数

唯一全局性运行的代码是:
- 不可变的全局变量声明
- main()函数

1.保持代码整洁
2.过程变得清晰

main() {
    local files=$(ls /tmp | grep pid | grep -v daemon)
}
</div>
temporary_files() {
    local dir=$1

    ls $dir \
        | grep pid \
        | grep -v daemon
}

main() {
    local files=$(temporary_files /tmp)
}
</div>

1.第二个例子好得多。查找文件是temporary_files()的问题而非main()的。这段代码用temporary_files()的单元测试也是可测试的。

2.如果你一定要尝试第一个例子,你会得到查找临时文件以和main算法的大杂烩。

test_temporary_files() {
    local dir=/tmp

    touch $dir/a-pid1232.tmp
    touch $dir/a-pid1232-daemon.tmp

    returns "$dir/a-pid1232.tmp" temporary_files $dir

    touch $dir/b-pid1534.tmp

    returns "$dir/a-pid1232.tmp $dir/b-pid1534.tmp" temporary_files $dir
}
</div>

如你所见,这个测试不关心main()。

五、调试函数

带-x标志运行程序:
bash -x my_prog.sh
</div>

只调试一小段代码,使用set-x和set+x,会只对被set -x和set +x包含的当前代码打印调试信息。
temporary_files() {
    local dir=$1

    set -x
    ls $dir \
        | grep pid \
        | grep -v daemon
    set +x
}
</div>

打印函数名和它的参数:
temporary_files() {
    echo $FUNCNAME $@
    local dir=$1

    ls $dir \
        | grep pid \
        | grep -v daemon
}
</div>

调用函数:
temporary_files /tmp
</div>

会打印到标准输出:

六、代码的清晰度

这段代码做了什么?

main() {
    local dir=/tmp

    [[ -z $dir ]] \
        && do_something...

    [[ -n $dir ]] \
        && do_something...

    [[ -f $dir ]] \
        && do_something...

    [[ -d $dir ]] \
        && do_something...
}
main
</div>

让你的代码说话:

您可能想查找下面的文章:

  • bash判断文件或文件夹是否存在的shell代码
  • 使用Bash Shell检查文件是否存在的方法
  • Bash中数组的操作教程
  • Bash Shell中的select命令简单使用示例
  • 使用Bash Shell获取文件名和目录名的简单方法
  • 使用Bash Shell对目录中的文件实现递归式拷贝
  • Linux bash Shell中的变量类型详解
  • Bash Shell中忽略大小写的设置方法
  • Shell 编程:Bash空格的那点事
  • Bash Shell 注释多行的几种方法

相关文章

  • 浅谈vim的四种模式及模式切换
  • Shell脚本判断Apache进程是否存在
  • linux shell实现求一个多维数组中的最大和最小值
  • shell中冒号的特殊用法分享
  • 用shell脚本和c语言将大写字母转成小写的代码
  • 一个简单的linux命令 cp
  • hi 感恩节——Linux基础教程之mysql和php
  • Linux IO的水平触发和边缘触发的区别
  • CPU负载监控脚本代码
  • linux C语言开发管道通信实例详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • linux shell 中 2>&1的含义
    • Linux SHELL if命令参数说明
    • 一个简单的防CC攻击Shell脚本分享
    • 一个简单的linux命令 cat
    • Shell脚本实现非法IP登陆自动报警
    • linux脚本判断条件总结(必看)
    • 关于Shell脚本效率优化的一些个人想法
    • 简单的Linux查找后门思路和shell脚本分享
    • 分享awk变量$0的妙用
    • 获取站点的各类响应时间(dns解析时间,响应时间,传输时间)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有