公司网站修改 优帮云,wordpress插件排行,ppt在哪个软件制作,上海网站建设联系方式一.Shell脚本编程概述
1.基本概念 将要执行的命令按顺序保存到一个文本文件#xff1b; 给该文件可执行权限#xff1b; 可结合各种Shell控制语句以完成更复杂的操作。
2.作用
Linux系统中的Shell是一个特殊的应用程序#xff0c;它介于操作系统内核与用户之间#x…一.Shell脚本编程概述
1.基本概念 将要执行的命令按顺序保存到一个文本文件 给该文件可执行权限 可结合各种Shell控制语句以完成更复杂的操作。
2.作用
Linux系统中的Shell是一个特殊的应用程序它介于操作系统内核与用户之间充当 了一个“命令
解释器”的角色负责接收用户输入的操作指令命令并进行解释将需要执行的操作传递给内
核执行并输出执行结果。常见的Shell解释器程序有很多种使用不同的Shell时其内部指令、
命令行提示等方面会存在一些区别。
3.Linux系统中常见的Shell脚本种类
通过/etc/shells文件可以了解当前Linux系统所支持的Shell脚本种类 bash:基于gun的框架下发展的shell/bin/bash。是目前大多数Linux版本采用的默认shellcsh:类似c语言的shelltcsh:整合了csh提供了更多功能sh:已经被bash替换nologin:让用户无法登录
4.应用场景
重复性操作交互性任务批量事务处理服务运行状态监控定时任务执行
二.Shell脚本的构成规范
编写脚本代码
使用vi或者vim编辑器一般都是使用vim编辑器每行一条Linux命令按执行顺序一次编写
vim 1.sh #使用vim编辑器编写shell脚本
#!/bin/bash #脚本解释器声明
#输出hello #注释
echo hello #linux命令
脚本申明解释器第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器其他类型的解释器如#!/bin/python#!/bin/expect注释信息以#开头的语句表示为注释信息可执行语句比如echo命令用于输出 之间的字符串 三. Shell脚本的执行
1.脚本执行逻辑
顺序执行程序按从上到下顺序执行选择执行程序执行过程中根据条件的不同进行选择不同分支继续执行循环执行程序执行过程中需要重复执行多次某段语句
2.Shell脚本的执行方法
#法一指定路径的命令要求文件必须有x权限
[rootlocalhost ~]#chmod x /root/first.sh
[rootlocalhost ~]#cd /root/
[rootlocalhost ~]#./first.sh
当前目录位于
/root#法二指定Shell来解释脚本不要求文件必须有x权限。
[rootlocalhost ~]#bash first.sh
当前目录位于
/root#法三source. 脚本路径执行shell脚本 不建议使用source会修改当前环境
[rootlocalhost ~]#source first.sh
当前目录位于
/root#法四将脚本文件放入$PATH中目录的其中一个目录直接输入脚本名
echo $PATH
/usr/local/sbin: /usr/local/bin :/usr/sbin :/usr/bin: /rpot/bin#法五自己创建一个路径将脚本文件所在的绝对路径添加至PATH中
在/etc/profile文件最后添加export PATH$PATH:脚本所在的绝对路径
直接输入脚本名执行脚本如果想要脚本全局运行补全需要将脚本放入echo $PATH路径下shell脚本的本质是命令的集合是一个程序需要有运行权限
2.1 方法一指定路径的命令要求文件必须有 x可执行权限
chmod x /root/1.sh #给脚本添加可执行权限
指定绝对路径 /root/1.sh
指定相对路径 ./1.sh 2.2 方法二指定shell来解释脚本不要求文件必须有 x 可执行权限
bashsh执行脚本 系统会创建一个子shell环境并在这个子shell环境中执行这个脚本 脚本执行结束后系统就会自动退出bash环境 2.3 方法三 source 与 . 脚本路径执行shell脚本不建议使用 不建议使用source 与 . 执行脚本会在当前 shell 环境中执行脚本 影响当前环境 2.4 方法四 将脚本文件放入$PATH中目录的其中一个目录直接输入脚本名执行
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin以下两个目录一般放自己创建或第三方应用程序生成的命令文件/usr/local/sbin:只有管理员能执行的命令
/usr/local/bin :所有用户能够执行的命令
以下两个目录一般放系统自带或者系统生成的命令文件/usr/sbin :只有管理员能执行的命令
/usr/bin: 所有用户能够执行的命令
/root/bin不存在将当前文件做个软连接放入或者使用cp复制到 /usr/local/bin目录下 直接输入脚本名执行脚本 2.5 方法五自己创建一个路径将脚本文件所在的绝对路径添加至PATH中
在/etc/profile文件最后添加export PATH$PATH:脚本所在的绝对路径 直接输入脚本名执行脚本
3.脚本错误调试
脚本错误种类
命令错误命令出错不会影响接下来的命令继续但是本条命令不执行语法错误直接影响脚本无法正常运行逻辑错误只能自己去筛查代码的正确
检查脚本错误
检查语法错误bash -n 脚本名称 不在当前目录下加绝对路径 检查(命令与逻辑)错误bash -x 脚本名称 不在当前目录下加绝对路径 set -e一旦出错立即停止 set -u变量不存在就停止
总结脚本错误常见的有三种区别
语法错误会导致后续的命令不继续执行可以用bash -n检查错误提示的出错行数不一定是准确的命令错误默认后续的命令还会继续执行可以使用 bash -x进行检查逻辑错误只能使用 bash -x检查
四.重定向与管道符
由于Shell脚本“批量处理”的特殊性其大部分操作过程位于后台不需要用户进行干预因此要学会提取、过滤执行信息变得十分重要所以我们需要重定向和管道。
1.交互式硬件设备标准输出输入
类型设备文件文件描述编号默认设备标准输入/dev/stdin0键盘标准输出/dev/stdout1显示器标准错误输出/dev/stderr2显示器 标准输入:从该设备接收用户输入的数据 标准输出:通过该设备向用户输出数据 标准错误:通过该设备报告执行出错信息
重定向的意思就是 不输出到默认设备上输出到你指定的位置
类型操作符用途重定向输入从指定的文件读取数据而不是从键盘输入重定向输出将输出结果保存到指定的文件覆盖原有内容重定向输出将输出结果换行添加在文件尾部重定向错误输出2将错误信息保存到指定的文件覆盖原有内容重定向错误输出2将错误信息追加到指定的文件中混合输出无论对错都可以重定向将标准输出、标准错误的内容保存到同一个文件中
示例1重定向输入与输出修改密码 示例2覆盖追加
#将12345678输入到文件log.txt中
[rootZhuzi ~]#echo 12345678 log.txt
[rootZhuzi ~]#cat log.txt
12345678
[rootZhuzi ~]##再将112234写入log.txt中这个时候会覆盖原来的数据
[rootZhuzi ~]#echo 112234 log.txt
[rootZhuzit ~]#cat log.txt
112234
[rootZhuzi ~]##继续将112234写入log.txt中使用,这个时候会追加原来的数据
[rootZhuzi ~]#echo 112234 log.txt
[rootZhuzit ~]#cat log.txt
112234
112234 2.管道符
管道符号 “|”,将左侧的命令输出结果作为右侧命令的处理对象
2.1 使用管道符修改密码 2.2 查看文件内容 五.echo命令打印输出内容 选项作用-n不追加换行-e\b 退格\c 抑制更多的输出\n 换行 \t 横向制表符 \v 纵向制表符
echo -n echo -e \b
echo -e \c echo -e \n echo -e \t echo -e \v
六.Shell脚本中的变量
1.变量的作用
用来存放系统和用户需要使用的特定参数
2.变量名要求
①定义变量格式变量名变量值(shell中不用声明类型所有类型均为字符串)
②定义变量时变量名要求
变量名区分大小写建议全部使用大写不能使用系统内置变量。如$PATH是系统外部命令的存放
路径等。
变量名不能以数字开头且不支持短横线 -。
3.设置变量 4.变量类型
①环境变量系统维护的变量用于设置工作环境使用env命令可以查看所有环境变量
②只读变量只可以读取不能修改的变量相当于常量用处较少 ③自定义变量用户自己定义的变量
④位置变量通过命令行给脚本传递参数
主要指执行脚本时后面所跟着位置。
$1-$9脚本后1-9的位置
${10}脚本后10以上的位置需要借助变量分隔符{}不然会将$1认为是一个位置变量然后输出再加上后面的数字。
⑤预定义变量系统已经定义好的变量只需要记住即可
$*表示所有位置参数的内容看成一个整体返回
$表示输出脚本后的所有位置参数每个参数都是独立的个体
$0表示脚本的文件名
$#表示位置参数的总个数
$$: 当前bash的pid
$?: 代表上一次命令执行结果是否正确0代表正确非0代表不正确
5、变量的作用范围
默认情况下新定义的变量只在当前的shell环境中有效因此称为局部变量当进入子程序或新的shell环境中局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量使用户定义的变量在所有子shell环境中可以继续使用
全局变量格式1 export 变量名
全局变量格式2export 变量名变量值 特殊符号 read -p
从键盘输入的内容变成变量
#!/bin/bash
read -p 请输入你要分区的设备 disk
read -p 请输入你要分区的大小 numecho -e n\n\n\n\n${num}\nw\n |fdisk ${disk}整数的运算
格式 expr 变量1 运算符 变量2 [运算符 变量3]
运算符
加法 减法 -乘法 \ *除法 /取余 取模%
#!/bin/bash
read -p 输入第一个数 n1
read -p 输入第二个数 n2
read -p 输入第三个数 n3expr $n1 \* $n2 $n3 - $n1 产生随机数灵活应用取余%和随机数RANDOM
想要随机产生1-32$[RANDOM%321] $[RANDOM%6]