一、Shell 脚本编写规范

1、一个规范的 Shell 脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在 Linux bash 的编程一般为:#!/bin/bash  或 #!  /bin/sh

bash 与 sh 的区别:sh 为 bash 的软连接,大多数情况下,脚本使用 “#!/bin/bash” 和 “#!/bin/sh” 是没有区别的,但更规范的写法是在脚本的开头使用    #!/bin/bash

2、在 shell 脚本中,跟在 # 后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被当做程序来执行,仅仅是给开发者和使用者看的,系统解释器是看不到的,更不会执行。注释可以自成一行,也可以跟在脚本命令的后面与命令在同一行。 注释尽量不要使用中文,在脚本中最好也不要有中文。

3、Shell 脚本的开头会加版本、版权等信息,如:

# Date:16:29 2018-10-20
# Author: Create by xiaoxie
# Description: This script function is ……
# Version: 1.1

4、在 shell 脚本中尽量不用中文注释,尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰。

5、Shell 脚本的命名应以.sh 为扩展名 例如:1.sh

6、成对的符号应尽量一次性写出来,然后退格在符号内增加内容,以防止遗漏。这些成对的符号包括: {}、[]、‘’、“”  等

7、中括号 [] 两端至少要有 1 个空格,因此,键入中括号时即留出空格 [  ],然后在退格键入中间内容,并确保两端都至少由一个空格。

8、对于流程控制语句,应一次性将格式写完,再添加内容。 如:一次性完成 for 循环语句的格式


for
do内容
done

9、通过缩进让代码更易读,如:

if 条件内容     then         内容
fi

10、对于常规变量的字符串定义变量值应加双引号,并且等号前后不能有空格,需要强引用的,则用单引号(‘’),如果是命令的引用,则用反引号(``)。

11、 脚本中的单引号、双引号及反引号必须为英文状态下的符号。

二、Shell 中的变量

定义变量时变量名建议用大写,如  A=xie     B=99

查看变量内容 echo $A  或  echo ${A}

  • 双引号:允许通过 $ 符号引用其他变量值
  • 单引号:禁止引用其他变量值,$ 视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果 全局变量的定义方法 export 变量名

位置参数

位置参数我们写脚本时候经常使用,比如脚本名称后面紧接着是空格加变量,空格加变量这种方式,其实就是带参数。

位置参数是一种在调用 Shell 程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。 位置参数之间用空格分隔,Shell 取第一个位置参数替换程序文件中的 $1,第二个替换 $2 , 依次类推。

注意:$0 是一个特殊变量,它的内容是当前这个 shell 程序的文件名,所以 $0 不是一个位置参数。

#! /bin/bash
echo $1
echo $(($2+$3))

当我执行时,我在文件名后加 3 个参数

预定义变量

预定义变量和环境变量相类似,也是在 Shell 一开始就定义的变量,不同的是,用户只能根据 shell 的定义来使用这些变量,所有预定义变量都是由符号 “$” 和另一个符号组成。 常见的 Shell 预定义变量有以下几种。

$# :位置参数的数量。比如编写shell有时候需要像接口一样判断入参的数量是否对。
$* :所有位置参数的内容
$? :命令执行后返回的状态,0 表示没有错误非 0 表示有错误
$$ :当前进程的进程号
$! :后台运行的最后一个进程号
$0 :当前执行的进程名
假如我现在有一个 1.sh 脚本文件,内容如下


#! /bin/bashecho $1
echo ${2}+${3}echo $#             #打印出位置参数的数量
echo $*             #打印出位置参数的内容
echo $?             #打印出命令执行后返回的状态
echo $$             #打印出当前进程的进程号
echo $0             #打印出当前进程的进程名

当我执行时,我在文件名后加 3 个参数

三、变量的算术运算

1、Shell 中常见的算术运算符

2、Shell 中常见的算术运算命令

3、双小括号 (())  数值运算命令的用法

双小括号 (()) 的作用是进行数值运算与数值比较,它的效率很高,用法灵活,是 Linux 下常用的运算操作符。其操作方法如下:

四、if 条件判断语句

###双条件判断#####
if 条件判断then命令
elif 条件判断then 命令
else命令
fi##或
if 条件判断;then命令
elif 条件判断;then 命令
else命令
fi

if 语句对于字符串的匹配

五、for 循环语句

for  条件
do命令
done##或for  条件;do命令
done

列表循环

案例一:循环列表Mon Tues Wed Thurs,依次将每个值赋给变量day,然后在do中做处理。

for day in Mon Tues Wed Thursdoecho "$day:http://www.weixueyuan.net"done

打印:

Mon:http://www.weixueyuan.netTues:http://www.weixueyuan.netWed:http://www.weixueyuan.netThurs:http://www.weixueyuan.net

案例二:分别将qiyios-release-1.8-3和qiyi-epel-1.1-3赋值给变量package,

然后拼凑连接进行安装。

假设OS_MAJOR是7,则分别会执行:

rpm -ivh http://repo-inter.xxx.domain/list/7/x86_64/Packages/xxxos-release-1.8-3.el7.noarch.rpm

rpm -ivh http://repo-inter.xxx.domain/list/7/x86_64/Packages/xxx-epel-1.1-3.el7.noarch.rpm

OS_MAJOR=$(rpm -q --queryformat '%{VERSION}' centos-release)
for package in xxxos-release-1.8-3 xxx-epel-1.1-3; dorpm -ivh http://repo-inter.xxx.domain/list/${OS_MAJOR}/x86_64/Packages/${package}.el${OS_MAJOR}.noarch.rpm
done

六、while 循环语句

while  条件
do命令
done

七、Break、Continue、exit 循环控制语句

break 、continue 在条件语句及循环语句(for、while、if 等)中用于控制程序走向;而 exit 则用于终止所有语句并退出当前脚本。

参考:

Linux 中编写 Shell 脚本

总结:linux 学习之 shell 脚本编写相关推荐

  1. linux脚本是什么语言,Linux学习之Shell脚本语言的优势是什么?

    当我们学习Linux技术的时候,会涉及各种各样的知识和内容,比如说shell脚本语言,我想很多人都会疑惑shell脚本语言有什么优势?为何学习Linux的时候必须学习呢?我们来看看吧. 当命令和程序语 ...

  2. linux php直接输出,linux学习之shell脚本 ------- 输入与输出

    概述 顾名思义,通俗来说异常就是指,那些产生在我们本来斟酌和设定的计划以外的意外情况. 生活中总是会存在各种突发情况,如果没有做好准备,就让人措手不及. 你和朋友约好了明天1起去登山,半道上忽然乌云蔽 ...

  3. linux循环条件,shell脚本编写 之 条件选择,条件判断,循环语句

    1 概述 编写shell脚本,一般离不开条件选择,条件判断以及循环语句.掌握这三个语法,将大大提高脚本的编写效率,使得脚本编写更加灵活,完成X相对复杂的工作 2 条件选择if语句 if语句选择执行,逐 ...

  4. 【linux 学习】shell脚本自动化登录

    每次登录都需要输入密码,,好麻烦滴感觉,于是想做个自动登录脚本,岂不美哉^ . ^ 如何输入密码是个大问题,好在有个交互输入的工具[expect] 首先需要安装一下, [Centos] #查看是否安装 ...

  5. linux中的echo%3e文件,Linux学习笔记-shell脚本中${}的使用方法

    ${} 除了做${var}变量替换,还有什么功能呢? # 举例说明 [[email protected] ~]$ file=/dir1/dir2/dir3/my.file.txt # 变量替换 [[e ...

  6. datetime报错 sql脚本_Linux中Mysql数据库备份shell脚本编写实例

    学了段时间的Linux,也学习了shell脚本编写的基本命令与语法,现做一个综合案例来详细讲解. 要求:1).每天凌晨备份数据库shaoxiao到/data/backup/db中 2).备份开始和备份 ...

  7. Linux系统一键安全加固shell脚本编写思路

    本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路: Linux系统一键安全加固shell脚本编写思路 1.编写须知 1.1 脚本使用说明 1.2 主要功能说明: 1.3隐藏 ...

  8. Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明

    原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...

  9. 基于linux下的shell脚本的编写

    shell脚本 (课前了解)c脚本编写: [root@localhost ~]# yum install gcc -y 安装gcc编译 [root@localhost ~]# vim hello.c ...

最新文章

  1. python图像相似度识别_一个用SIFT特征比较图像相似度的python小程序
  2. PHP框架半透明,CSS设定一个元素半透明
  3. c语言向自定数组_C语言一维数组的定义和引用
  4. VS2008中开发智能设备程序的一些总结
  5. 生产替代物料_一种替代的多生产者方法
  6. 排序算法之(7)——堆排序
  7. 前端学习(2023)vue之电商管理系统电商系统之通过路由加载订单列表
  8. 蚂蚁区块链BaaS:开放在云端,落地于实体
  9. jquery ajax 跨域解决方案 - CORS
  10. JavaScript:模块化及模块化规范
  11. 安卓模拟定位mockLocation,闪退?
  12. STM32的Flash地址是0x08000000,从0x00000000不可以?
  13. 产品思维:什么是互联网思维
  14. 嵌入式系统课堂总结1
  15. 再生龙(Clonezilla)
  16. python爬淘宝商品销量信息_python爬取淘宝商品销量信息
  17. VN.PY量化框架创始人教你做量化交易
  18. 用深度学习做命名实体识别(二):文本标注工具brat
  19. [精华] qmail安装心得(安装过程)
  20. 流式布局FlowLayout使用

热门文章

  1. 威锋源新地址2020_2020年10月23日更多互联网数据报告(附下载地址)
  2. 程序化交易软件的作用
  3. 如何开启MATLAB并行,如何并行运行Matlab计算
  4. 杭州江南专修学校计算机应用,2021年杭州江南专修学院高级护理招生计划及专业介绍-升学乐中职网...
  5. windows11备忘录便签快捷键:你需要知道的有关它的一切
  6. 短信发送平台的推广技巧有哪些?3个小技巧要记牢
  7. 我的世界服务器自定义ui,我的世界主界面自定义修改教程
  8. python 训练好的模型怎么保存_如何保存训练好的机器学习模型
  9. 总结“生成账单”功能的要点
  10. 封装一个自己的通用Ajax