shell脚本编程(1) ——shell的基本概念
各位博客们大家好啊!这是我个人的第二篇博客,写的不好的地方,希望大家多多指点,本偏文章主要是介绍shell脚本的一个基础,让大家能够了解到shell这款编程语言(* ^ – ^ *)
文章目录
- shell脚本编程(1) ——shell的基本概念
- 一、shell的概述
- 1、什么是shell
- 2、shell的使用方式
- 3、常见的shell程序种类
- 4、bash的基本特性
- 1、什么是shell脚本
- 2、脚本构成及执行方式
- 1、变量的概述
- 2、变量的种类
- 3、变量值及范围控制
- 1、整数运算
- 2、小数运算
- 1、test测试
- 2、常见的测试操作
- 3、组合多个条件
一、shell的概述
1、什么是shell
- Shell中文翻译为贝壳,即相当于操作系统的外壳
- Shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
- Shell 既是一种命令语言,又是一种程序设计语言
- 负责向内核翻译及传达用户程序指令
2、shell的使用方式
- 交互式(命令行):人工干预、智能化程度高、逐条解释执行、效率低
- 非交互式(脚本):提前编写、智能化难度大、批量执行、效率高、方便后台执行
3、常见的shell程序种类
- /bin/bash 、/bin/sh 、/sbin/nologin 、/bin/tach 、/bin/ksh
4、bash的基本特性
- 快捷键、tab键补齐、命令历史、命令别名、重定向、管道……
二、shell脚本编辑及执行
1、什么是shell脚本
- 提前写好可执行的shell命令语句,能够完成特定的任务文件
- 优点:可顺序、批量化处理,解释型程序
- 简单脚本编写的“四步走”:
① 新编辑文本文件 vim /mnt/first.sh
② 编写脚本语句 echo ‘Hello world’
③ 添加X执行权限 chmod +x /mnt/first.sh
④ 绝对路径执行 /mnt/first.sh
2、脚本构成及执行方式
-
规范的脚本构成(三要素)
①脚本声明(使用哪种解释器) #!/bin/bash②注释信息(步骤、思路、用途、变量含义等) #输出Hello world③可执行的语句 echo ‘Hello world’
-
脚本的执行方式
①方式一:作为“命令字”(指定脚本的文件路径,前提是有X权限)
②方式二:作为“参数”(bash 脚本文件路径,前面加解释器名,不需要X权限)
三、shell变量
1、变量的概述
-
什么是变量
-以固定名称存放,可能会变化的值(以不变名称储存可以变化的值)-提高脚本对任务的需求、运行环境变化的适应能力-方便在脚本中重复使用
-
定义/赋值/查看/取消变量
- 定义/赋值变量: 变量名=变量值、X=12- 查看变量: echo $变量名、echo${变量名}- 查看所有的变量: set- 查看常用的环境变量: env- 手动取消变量: unset 变量名 、变量名=空
-
定义变量注意事项
- 若指定的变量名已存在,相当于为此变量重新赋值- 等号两边不要有空格- 变量名由字母/数字/下划线组成,区分大小写- 变量名不能以数字开头,不要使用关键字和特殊字符
2、变量的种类
-
环境变量
- 变量名一般都大写,用来设置用户/系统环境,由系统定义赋值完成- 常见的环境变量:HOSTNAME主机名、USER用户名、UID用户的id号、SHELL用户使用的解释器、PWD当前所在路径、PS1一级提示符、PS2二级提示符 HOME家目录PATH存储命令的路径
-
位置变量
在执行脚本时提供的命令行参数$n,(n为序号 $1、$2....${10}、${11}...
-
自定义变量
用来保存脚本程序的执行信息直接使用这些变量、不能直接为这些变量赋值$# 已经加载的位置变量(参数)的个数$? 程序退出后的状态值,0表示正常,其他值表示异常$$当前运行进程的PID号$*所有位置变量的值$0当前所在进程或脚本名
3、变量值及范围控制
-
shell中三种定界符
- 双引号 ” ” 允许扩展,以$引用其他变量- 单引号 ’ ’ 禁止扩展,即便$也视为普通字符(可以屏蔽特殊符号)- 反撇号 ` ` 将命令的执行结果作为变量值、或使用$( )
-
屏蔽敲键盘的时候显示信息
- ssty -echo 屏蔽回显- stty echi 恢复回显
-
发布全局变量(进入子进程也是可以显示该变量)
- export 发布或者创建全局变量- export -n 取消全局变量
-
交互式输入变量值(从用户获取变量的值)
- read -p \"加提示信息\"
四、shell中数值运输
1、整数运算
-
基本运算类别,四则运算、取余运算
加法:num1 + num2减法:num1 - num2乘法:num1 * num2除法:num1 / num2求模:num1 % num2
-
expr运算工具 (运算符两边要有空格,乘法需要\\转义*的特殊含义)
格式: expr 整数1 运算符 整数2 ...
类型 | 运算符 | 示例 |
---|---|---|
加法 | + | expr 42 + 33 |
减法 | – | expr 42 – 33 |
乘法 | \\* | expr 42 \\ * 33 |
除法 | / | expr 42 / 33 |
取余 | % | expr 42 % 33 |
-
$[ ]、$(( ))算式替换运算
- 格式:$[ 整数1 运算符 整数符]- 乘法操作*无需转义,运算符两侧可以无空格 如:x=10- 引用变量可省略$符号 echo $[x+1] 或者 echo $((x*21))- 计算结果替换表达式本身,可结合echo命令输出 结果分别为:11和210
-
变量的自增/减等操作
- 使用$[]替换,或者let命令来完成,结合echo命令查看结果- let 不显示运算结果,通常用于创建或修改变量- 使用let创建变量:let a=10+10 创建变量a,值是20
2、小数运算
-
使用bc实现小数运算
- 多数Linux系统默认安装此工具- 支持高精度的数值运算- 直接运行bc可进入交互式运算界面, quit退出- 设置scale=n可约束小数位
[root@svr5 ~]\\# bc //直接命令行执行bc打开bcit算器程序12.23*10.22 //提交表达式即输出结果124.99 //默认输出结果为两位小数scale=4 //将可用的小数显示为4位12.23*10.22 //提交表达式即输出结果124.9906
-
结合管道向bc发送表达式
- 多个表达式以分号分隔- 通过echo命令+管道传递要计算的表达式
[root@svr5 ~]\\# A=12.34[root@svr5 ~]\\# echo \"$A*56.789\" | bc //单表达式700.7 76[root@svr5 ~]\\# echo \"scale=4; $A*56.789;5/3\" | bc //多表达式700.7 7621.6666
-
小数值的比较
- echo \"数值1比较符数值2\"| bc- 如果表达式成立,则返回的计算结果为1 ,否则返回0- 常见比较操作: >、>=、<、<=、= =、!=
[root@svr5 ~]\\# A=12.34 ; B=56.78[root@svr5 ~]\\# echo \"$A<= $B\" | bc //A是否小于或等于B1[root@svr5 ~]\\# echo \"$A>$B\" | bc //A是否大于或等于B0
五、条件测试
1、test测试
-
语法格式
test 选项 参数[ 选项 参数 ]help test #查阅帮助
2、常见的测试操作
- 字符串比较
操作符 | 含义 | 举例 |
---|---|---|
== | 是否相等 | [ a == b ] |
!= | 是否不相等 | [ a != b ] |
-z | 判断变量是否为空 | a=[ -z $a ] |
!-z | 判断变量是否非 | a=[ ! -z $a ] |
使用echo $?检查结果
- 比较整数值的大小
操作符 | 含义 | 举例 |
---|---|---|
-eq | 等于(Equal) | [ x -eq 100 ] |
-ne | 不等于(Not Equal) | [ x -ne 100 ] |
-ge | 大于或等于(Greater or Equal) | [ x -ge 100 ] |
-le | 小于或等于(Lesser or Equal) | [ x -le 100 ] |
-gt | 大于(Greater) | [ x -gt 100 ] |
-lt | 小于(Lesser) | [ x -lt 100 ] |
- 文件状态测试
操作符 | 含义 | 举例 |
---|---|---|
-e | 判断对象是否存在( Exist),若存在则结果为真 | [ x -e /mnt ] |
-d | 判断对象是否为目录( Directory), 是则为真 | [ x -d /mnt ] |
-f | 判断对象是否为一般文件( File), 是则为真 | [ x -f /etc/passwd ] |
-r | 判断对象是否有可读( Read )权限,是则为真 | [ x -r /mnt ] |
-w | 判断对象是否有可写( Write )权限,是则为真 | [ x -w /mnt ] |
-x | 对象是否有可执行( eXcute )权限,是则为真 | [ x -x /mnt ] |
3、组合多个条件
- 一个逻辑分隔判断
操作符 | 含义 | 举例 | 备注 |
---|---|---|---|
&& | 之前任务成功就执行之后任务 | ls && ls 前一个ls执行成功了,又执行了第二个ls,共执行2次ls | 给定条件必须都成立,整个测试结果才为真 |
|| | 之前任务失败才执行之后任务 | ls || ls 前一个ls执行成功了,不执行第二个ls,共执行1次ls | 只要其中一个条件成立,则整个测试结果为真 |
- 多个逻辑符号组合判断
操作符 | 含义 | 举例 |
---|---|---|
&& | 前后任务都成功,算该组成功 | ls && ls && ls 、 ls && ls || ls |
|| | 前后任务有一个成功,就算该组成功 | ls || ls || ls 、 ls || ls && ls |
解析:
ls && ls && ls //第1个ls成功,执行第2个, 前2个都成功,执行第3个ls && ls || ls //第1个ls成功,执行第2个,前2个都成功,不执行第3个ls || ls || ls //第1个ls成功,不执行第2个,前2个算成功,不执行第3个ls || ls && ls //第1个ls成功,不执行第2个,前2个算成功,执行第3个[ root == $USER ] && echo \"我是管理员\" || echo \"我不是管理员\" //输出我是管理员
结束啦
这篇的基本介绍就先写到这里,后面会继续更新shell脚本的一些常用的用法以及后面企业中一些实用的shell脚本的运用,感谢你们的浏览,也希望对你们有所帮助,你的点赞是我努力的动力,谢谢你们!