Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1129603
  • 博文数量: 1096
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 11060
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-07 15:17
个人简介

linux工程师,RHCE

文章分类

全部博文(1096)

文章存档

2023年(84)

2022年(314)

2021年(251)

2020年(244)

2019年(176)

2018年(27)

我的朋友

分类: 系统运维

2022-05-19 11:36:42

Linux系统中Shell脚本编写的一点心得

作为一个软件测试人员, 经常会跟开发打交道,产品开发阶段,他们经常会提供一些pythonshell等脚本作为bug的临时解决方案以方便测试继续进行。最近接触的shell脚本比较频繁,感觉自己的基础有些薄弱,就自学了下,顺便把获取的知识点总结下,希望也能对需要的人有所帮助。

 

提到Shell脚本,必不可少的要知道Shell终端解释器,就像java语言,要有java编译器,python语言,要有pycharm等文本编译器一样,它的作用就是人和计算机之间的翻译官,让彼此可以相互交流的工具。作为一门语言,必不可少的要知道这门语言的基础知识以及怎么运用这些基础知识进行业务处理,下边就是对这些基础的总结。

(一) Shell脚本基础

Shell脚本常用交互式和批处理两种方式和计算机交流。所谓交互式是指用户向计算机输入一条指令就立马执行,而批量处理的方式就是把用户想要做的事情事先写好,然后交给计算机一起处理。

一个完整的shell脚本分为三部分,如下example.sh:

#1.脚本声明

#!/bin/bash    

 #2.对该文本功能的的介绍                     

#For Example by Shell     

#3.用户想实现的逻辑功能

pwd

ls -al

 

可以尝试用命令bashexample.sh 或./example.sh执行该脚本看下执行结果,有时会提示权限不够,记得检查该脚本的是否有执行权限和执行用户身份。

 

(二) 如何接收用户参数

上边的脚本程序只能处理一些定义好的功能,不能对输入参数进行灵活处理,当然,Shell脚本语言早也早就贴心的考虑到这些问题,用$表示从外部接收的变量,如$0对应当前shell脚本的名称,$1$2$3$4……分别对应第N个位置的参数。

既然能够从外部接收变量,那么怎么判断从外部输入的变量是否符合要求呢?系统中的Shell脚本语言当然也会考虑到,用条件表达式表示:

测试语句格式:[条件表达式]

注意,条件表达式两边均有一个空格,若条件成立,返回数字0,否则随机返回其他数值。

例如: [ -d /etc/fstab ], 表示判断/etc/fstab是否为目录类型的文件,其返回值可以用 echo $? 来查看。

 

 

(三) 流程控制语句

在真实的业务场景中,经常会有很复杂的业务逻辑,通过ifforwhilecase这4种流程控制语句来实现,这些业务逻辑跟pythonjava等编程语言处理逻辑是一样的,只不过语法的表现形式略有不同。

1. If 条件测试语句

If条件语句在shell脚本中的格式:

If 条件测试操作

Then 命令序列

                             Fi

例如:判断/media/cdrom文件是否存在,若存在就结束,若不存在,就去创建

#!/bin/bash

#For Example by Shell

DIR="/media/cdrom"

if  [ ! -e $DIR ]

then    

mkdir -p $DIR

fi

2. For循环语句

For循环语句在shell中的格式:

For 变量名in 取值列表

Do

命令序列

Done

例如:遍历所有的node配置文件configgiles,并在每个node上执行dimension_image_3.1.4.pypython脚本。

ConfigFiles=("image15_B4020S2.cfg"  "image38_B4180S2.cfg"  "image26_B4120S2.cfg"  "image49_9BFNJH2.cfg")

for config in ${ConfigFiles[*]}

do

{

        echo "Update PTAB location in file $ConfigHome${PreConfig}/$config"

        sed -i '/payload=/'d $ConfigHome${PreConfig}/$config

        echo $Pre_payload$PTAB_Build>> $ConfigHome${PreConfig}/$config

        echo "-----------Start to image system by $config -----------------------------------"

        python3 ${ConfigHome}dimension_image_3.1.4.py -C $ConfigHome${PreConfig}/$config -D -L ${ConfigHome}logs/ -T 4500

}&

done

 

3. While条件循环语句

while循环语句在shell中的格式:

while 条件测试操作

do

命令序列

                             Done

例如:针对构建环境的操作,如果成功,则直接结束,否则再次retry,最多retry3次。

loop_times=0

retry_times=3

while [ $loop_times -lt $retry_times ]

do

    echo -e "\n Start to setup cluster"

setup_cluster

    echo -e "\n Start to wait for cluster complete"

return_code=`echo $?`

    if [ $return_code -eq 1 ]; then

        let loop_times++;

        echo -e "\n Fail to setup cluster, loop time: $loop_times"

    else

        echo -e "\n Success to setup cluster"

        break;

    fi

done

4. Case条件测试语句

Case条件测试语句在shell中的格式:

Case 变量值in

模式1

命令序列1

;;

模式2

命令序列2

;;

       ……..

Esac

例如:

#!/bin/bash

#For Example by Shell

Read -p “请输入一个字符,并按Enter键确认:” KEY

Case$KEY”in

[a-z] |[A-Z] )

Echo “您输入的是字母”

;;

[0-9])

Echo “您输入的是数字”

;;

Esac

以上就是总结的shell脚本语言基础以及4种逻辑处理语句的表达方式,更详细的可以参考这本书的第4章,比如,条件测试语句的4种方式:文件、逻辑、整数值、字符串比较测试语句在书中会有更详细的介绍,这里只是粗略的列出大纲,方便回忆知识点。有这方面需要的朋友,这本书真心推荐给你。

阅读(273) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~