shell脚本之变量与if语句(笔记)

第一章hell编程规范与变量

技能目标
掌握shell脚本编程规范
掌握管道,重定向
掌握shell环境变量

在linux系统中Shell脚本可以批量处理,自动化地完成一系列的维护任务
Shell脚本就是要将执行的命令按“顺序”保存到一个文本文件中后缀为“.sh”,并给文件“x”权限,方便一次性执行的一个程序文件
Shell编程规范
Shell脚本充当一个”命令解释器“将命令解释”,并输出执行结果。/etc/shells文件保存当前系统所有支持的shell脚本种类
一个完整的shell脚本应包含3部分 如下
脚本声明
注释信息
可执行语句
vim mama.sh //创建并编辑shell脚本文件后缀为.sh

chmod 777 mama.sh //给文件x权限
执行shell脚本:两种方法“.[文件名]”或“sh[文件名]”

管道与重定向
管道“|”:把位于管道符“|”左侧命令输出的结果,作为右侧的输入(处理对象),同一行命令多个使用
重定向:
输入重定向<:是指把文件导入到命令中
输出重定向>:是指把原本要输出到屏幕的数据信息写入到指定文件中
语法:>(要清空) >>(不清空) 2>(输出错误信息)
符号 作用
命令 > 文件 将标准输出重定向到文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到文件中(不清空)
命令 2>> 文件 将错误输出重定向到文件中(不清空)
命令 &>> 文件 将标准错误都写入到文件中(不清空)

Shell脚本变量
常见shell变量类型包括:自定义变量,环境变量,位置变量,预定义变量
自定义变量
由系统用户自己定义的变量,只有在用户自己的shell环境中有效
格式:[变量名]=[变量值]等号两边没有空格,且变量名需以字母或_开头
QQ=QQ //创建自定变量
Version=8.5.1 //创建自定变量
查看变量值:通过变量名前添加“$”符号,使用echo命令查看(可以多个)。对于没有定义的变量将直接显示
[root@localhost /]# echo $QQ $Version //查看变量值
QQ 8.5.1 //显示变量值
[root@localhost /]# echo $QQ ${Version}45 //没有定义的变量加{}
QQ 8.5.145 //紧跟其后显示

变量赋值的转义符
双引号(”):允许引用其他变量 ,不进行转义处理
单引号(’):禁止引用其他变量,其中所有的变量为单纯的字符串
反撇号(`):命令替换,允许某个命令的结果复制给变量,实现嵌套命令替换操作已改用“()”来代替反撇号(把其中的命令执行后返回结果)
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串
read命令——读取单行数据
格式:read【选项】
选项:
-p:后面跟提示信息,即在输入前打印提示信息
-t:后面跟秒数,定义输入字符的等待时间
-e: 在输入的时候可以使用命令补全功能
-n: 后跟一个数字,定义输入文本的长度

设置变量的作用范围
默认情况下,我们新定义的变量只有在当前shell环境有效,也称局部变量,使用export将指定的变量导为“全局变量”(要在定义变量的shell环境下配置)
格式1:export 变量名 …
格式2:export 变量名=变量值 …
-n:删除指定的变量。变量实际上并未删除
-p:列出所有的shell赋予程序的环境变量

数值变量运算(每项一定要有空格隔开)
Shell变量的数值运算多用于脚本程序的过程控制(循环次数,使用量比较)
格式:expr [变量1] [运算符] [变量2] ····计算数值变量要是有“$”
注意项:
空格: 隔开每个项
反斜杠\:\后一个操作符为单纯字符,放在 shell 特定的字符前面
引号”:对包含空格和其他特殊字符的字符串要用引号括起来
选项:
Length:计算字串长度
Index:抓取第一个字符数字串出现的位置
实例:使用expr进行四则运算
[root@localhost ~]# expr ( 20 - 10 ) * 2 + 100
120 //每项用空格分隔 \作用使后面的“(”为单纯字符
常用的操作符及含义

操作符 含义
+, -, /*, /, % 分别表示加,减,剩,除,求余

, <, =, >=, 分别表示大于,小于,等于,大于或等于
&&:逻辑与 表示当前面的命令执行成功后才会执行它后面的命令
||:逻辑或 表示当前面的命令执行失败后才会执行它后面的命令
!:逻辑非 表示把条件测试中的判断结果取相反值
$? 显示上一条命令执行后的返回值,只有为0表示成功

特殊变量
特殊变量包括:环境变量,位置变量,预定义变量
环境变量
环境变量是出于运行linux系统需要提前创建的一些列变量
env命令——查看当前环境下的环境变量
选项:
-i:开始一个新的空的环境
-u:从当前环境中删除指定的变量
最重要的几个环境变量
变量名称 作用
HOME 用户的主目录(即家目录)
SHELL 用户在使用的 Shell 解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL MAIL
LANG 系统语言、语系名称
EDITOR 用户默认的文本编辑器
PATH 定义解释器搜索用户执行命令的路径
PS1 Bash 解释器的提示符
位置变量
方便通过命令行为程序提供操作参数
当执行命令操作时,第一个字段表示命令或脚本程序,其他从左到右为位置变量,也称位置参数使用$1,$2,$3···$9表示。
实例:
[root@localhost ~]# vim xiaomao.sh //创建一个shell脚本

[root@localhost ~]# . xiaomao.sh 12 34 //测试位置变量

预定义变量
预定义变量:定义好的变量用户直接使用。
$*:表示位置参数内容
$?:表示前一条命令的返回状态
$0:表示当前执行脚本或程序的名称
$#:表示命令行中位置参数个数

第二章shell编程之条件语句

技能目标
掌握shell脚本条件测试
掌握if语句编程

条件测试
Shell环境根据命令执行后的返回值($?)来判断是否执行成功。返回值为0则表示成功。

test命令——检查条件是否成立(三种格式)
格式:
test 条件表达式
[ 条件表达式 ] //常用,方括号内空格隔开
[[ ]]

文件测试
文件测试:根据给定的文件路径,判断对应的是文件还是目录,或有无读,写,执行的权限等。(echo $?验证 0表示成功)
格式:[ -d 文件路径 ] //判断文件路径是否为目录
操作选项:
-d:测试文件是否为目录
-e:测试目录或文件是否存在
-f:测试是否为文件
-r -w -x:分别表示测试当前用户对文件是否有读,写,执行权限
实例:
[ -d /memdia/chrom ] //测试文件是否问目录
echo $? //返回结果为0 则成功,是目录
整数值比较
整数值比较:根据给定的两个整数值,判定二者的关系。
操作选项:
-eq:等于 =
-ne:不等于
-gt:大于 >
-ge:大于等于
-lt:小于 <
-le:小于等于
实例:

字符串比较
字符串比较:检查用户输入,系统环境等是否满足条件。
操作选项:
==:第一个字符串与第二个字符串相同
!=:第一个字符串与第二个字符串不相同,“!”表示取反
-z:检查字符串是否为空

逻辑测试
逻辑测试:判断两个或多个条件之间的关系。使用时放在不同的测试语句或命令之间。
&&:逻辑与 表示当前面的命令执行成功后才会执行它后面的命令
||:逻辑或 表示当前面的命令执行失败后才会执行它后面的命令
!:逻辑非 表示把条件测试中的判断结果取相反值
If语句
使用“&&”和“||”就能完成简单的判断操作,当执行较为复杂的命令语句时,则使用if条件语句。
If条件语句的结构:if语句最为常见的流程控制方式(如果···那么···),根据复杂程度分为三种:单支,双支,多支。
单分支if语句
If语句指不同测试结果所对应的执行语句,单分支if语句只有条件成立才会执行相应操作。

单分支if语句格式:
if [ 条件测试操作 ]
then
命令序列
if
实列:
DIR="/media/cdrom"  //设置自定义变量
if [ ! -e $DIR ]	  //测试/media/cdrom文件是否存在!并取反
then				  //比如上面文件存在,成立才会执行
mkdir -p $DIR		 //执行命令
fi					 //结束语句

双分支if语句
双分支语句结构,“条件成立”或“条件不成立”都会执行相应操作
条件成立执行then,不成立执行else
双分支if语句格式:

if [ 条件测试操作 ]		
then 				//成立语句
	命令序列1		//条件成立才执行的操作命令
else			   //不成立语句
	命令序列2	   //条件不成立才执行的操作命令
fi

多分支if语句
多分支if语句更具“条件成立”或“不成立”。能嵌套使用,多次判断

多分支if语句格式:
if [ 条件测试操作1 ]
then 						//成立则执行命令
	命令序列1				
elif [ 条件测试操作2 ]  //不成立则执行另一个条件操作,依次
then	
	命令序列2
else
	命令序列3
fi

多分支if语句操作流程:首先判断条件测试操作1的结果,如果条件1成立,则执行命令序列1,然后结束fi判断;如果不成立,则继续条件测试操作2的结果,成立则执行命令序列2;可以设置多个elif,若都不成立则执行else

实列:
#!/bin/bash
read -p "请输入你的成绩(0-100)分:" NIMA		
if [ $NIMA -ge 85 ] && [ $NIMA -le 100 ]
then
        echo "$NIMA分!优秀"
elif [ $NIMA -ge 70 ] && [ $NIMA -le 84 ]
then
        echo "$NIMA分,及格"
else
        echo "$NIMA分?不及格"
fi
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值