Linux基础知识(十六)shell脚本编程

avatar
作者
猴君
阅读量:0

一、简介

  1. 用户通过shell向计算机发送指令
  2. 计算机通过shell给用户返回指令的执行结果

1.1 通过shell编程可以达到的效果

  • 提高工作效率
  • 可以实现自动化

1.2 需要学习的内容

  • Linux
  • shell的语法规范

1.3 编写shell的流程

  • 第一步:用vi/vim创建一个.sh的文件
  • 第二步:在文件中进行开发
  • 第三步:给文件赋予可执行权限
  • 第四步:执行脚本

二、变量

2.1 变量分类

  • 本地变量
  • 局部变量
  • 环境变量
  • 位置变量
  • 特殊变量

2.2 本地变量

  • 定义变量:Var_Name="Value"  变量名=变量值
  • 引用变量:${Var_Name}  [{}可以省略不写]
  • 撤销变量:unset Var_Name

本地变量适合在终端使用,新开一个终端或关闭后就会消失

例:

本地变量在哪里都可以用,文件和终端不在一个环境内

2.3 局部变量

定义:local Var_Name="Value"

  • 局部变量只在函数内部生效

例:

a{     name=张三     echo } b{     name=李四     echo }

只在内部有效,出了花括号没用

2.4 环境变量

  • 定义:expot Var_Name="Value"   【最好不要自己随便定义,环境变量都是大写的】
  • set命令可以显示当前系统上的所有变量
  • export、env命令可以显示环境变量

常用的环境变量

  • PS1                       #命令提示符
  • HOSTNAME         #存放主机名的
  • LANG                   #语言
  • ...

2.5 位置变量

主要用于橡胶板中传递参数

表示方法:$1,$2,$3,..$n

例:    ./1.sh 1 5 9 (传入的参数)

2.6 特殊变量

  • $0         #脚本自身的名称
  • $?         #上个命令的执行状态
  • $#         #参数列表

2.7 变量命名要求:

  • 只能使用数字、字母和组成
  • 不能以数字开头
  • 不能使用程序中的关键字

2.8 变量名的默认规则:

  • 见名知意
  • 自定义变量小写
  • 环境变量大写

三、重定向

3.1 什么是重定向?

重定向就是修改指令发送给计算机的途径,计算机将指令执行结果返回给用户的途径

3.2 重定向的分类

  • 输出重定向
  • 标准输出重定向
  • 错误输出重定向
3.2.1 输入
  • 标准输入:键盘
  • 输入重定向:<
3.2.2 输出
  • 标准输出:终端
  • 标准错误输出:终端
  • 标准输出重定向:>     >>
  • 标准错误输出重定向:2>     2>>

将结果保存到文件、屏蔽输出结果

3.3 特殊文件

  • /dev/null
  • /dev/zero

dd if=/dev/zero of=zeros.bin bs=1G count=100000   

 #读0,用来测试的,不显示内容但会占用内存

3.4 管道符

  • |
  • 仅仅用于传递命令的执行结果给另一个命令

四、bash条件判断基础

4.1 判断的作用:

  • 判断后续操作的前提条件是否满足
  • 如果满足执行一种指令,不满足则执行另一种指令

4.2 条件测试类型

  • 整型测试
  • 字符测试
  • 文件测试

4.3 逻辑运算

4.3.1 与运算   &&
  • 真&&真=真
  • 真&&假=假
  • 假&&假=假
  • 假&&真=假
4.3.2 或运算   ||
  • 真||真=真
  • 真||假=真
  • 假||真=真
  • 假||假=假
4.3.3 非运算   !
  • !真=假
  • !假=真

4.4 操作符

  • -gt         大于
  • -lt          小于
  • -ge        大于等于
  • -le         小于等于
  • -ne        不等于
  • -eq        等于

4.5 判断方式

test EXPRESSION

  例:test 3 -gt 4

[EXPRSSION]

例: [ 3 -gt 4 ]

[[ EXPRESSION ]]

例:[[ 2 -gt 1 ]]

用命令执行状态来作为判断条件

查看脚本的执行过程:

bash -x 脚本名

4.6 bash 条件判断语法格式

if判断的三种格式

4.6.1 单分支
if 条件;then     分支1 fi
4.6.2 双分支
if 条件;then     分支1 else     分支2 fi
4.6.3 多分支
if 条件;then     分支1 elif     分支2 elif      分支3 ... else     分支 fi

例:成绩大于90,则输出成绩A;成绩大于80,则输出成绩B;成绩大于70,则输出成绩C;成绩大于60,则输出成绩D;0分以上则输出E

例:让用户指定一个文件,判断如果有空白行,就显示空白行数,没有则提示"no"

4.7 整型测试方法:

整型测试通常都是二元测试

格式是:num1 oprand num2

4.8 用户和脚本进行交互

位置变量

read命令

read -p "参数" 变量名

例:

read -p "请输入第一个数字:" num

例题:

让用户通过键盘输入一个用户,如果用户存在就显示其用户的用户名和uid,否则就显示用户不存在

4.9 字符测试法

双目测试

比较两个字符串

  • ==   等于,等值比较
  • !=    不等于
  • =~    匹配是否在范围

单目测试

  • -n $stringVar:字符串是否为空,不空为真,空则假
  • -z $stringVar:字符串是否为空,空则为真,不空为假

 例:

  • -a:用于逻辑与的操作
  • -e:检查文件是否存在

例:

  • -f:检查文件是否为普通文件

  • -d:检查文件是否为目录文件

  • -r:检查文件是否可读

  • -w:检查文件是否可写

  • -x:检查文件是否可执行

例:让用户输入一个用户名,先判定用户是否存在,不存在以7为退出码;

判断用户的shell是否为/bin/bash,如果是则显示"bash user",退出码为0,否则则显示为"not bash user" 退出码为1

  • -b:判断是否存在且是一个块特殊文件

例:1.显示如下菜单

cpu)    show cpu info;

mem) sowmemory info;

quit)   quit

请输入你的选择:

2.如果用户选择了cpu则显示文件/proc/cpuinfo的信息;

3..如果用户选择了mem则显示文件/proc/meminfo的信息;

4.如果用户选择了quit则退出且状态码为5;

5.如果用户输入其他其他字符,则显示未知选项请重新执行脚本,退出码为6;

4.10 位置参数轮替

#!/bin/bash echo "参数列表:$#" echo "参数列表:$@" echo " " shift 2 echo "参数列表:$#" echo "参数列表:$@" echo " " shift 2 echo "参数列表:$#" echo "参数列表:$@"

说明:shift在这里就是起到了一个轮替的作用,2表示一次轮替2个参数

在下一次echo的时候,参数会从轮替后的数字开始计算

例:使用形式如下:username u username[v{1|2}]

-u选项用于指定用户名;脚本显示用户的uid,gid

如果同时使用-v选项,v后面值是1,显示用户的家目录

v后面的值是2,显示用户的家目录和shell类型

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!