Linux之shell脚本
一、shell脚本基础
1.1shell的作用
1.1.1shell脚本的概念
-
将要执行的命令按顺序保存到一个文本文件
-
给该文件可执行权限
-
可结合各种Shell控制语句以完成更复杂的操作
1.1.2shell脚本应用场景
-
重复性操作
-
交互性任务
-
批量事务处理
-
服务运行状态监控
-
定时任务执行
1.1.3shell的作用--命令解释器
- 介于系统内核和用户之间,负责解释命令
1.1.4用户登陆的shell
[root@localhost ~]#cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh
1.2shell脚本的构成
构成
-
脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器,还有其他类型的解释器,#!/bin/python #!/bin/expect
-
注释信息:以#开头的语句表示为注释信息
-
可执行语句:比如echo命令用于输出" "之间的字符串
[root@localhost ~]#vim test.sh
#!/bin/bash #the first shell echo "hello world"
[root@localhost ~]#bash test.sh hello world
1.3shell脚本的执行逻辑和方式
脚本执行逻辑
-
顺序执行:程序按从上到下顺序执行
-
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
-
循环执行:程序执行过程中需要重复执行多次某段语句
脚本执行方式
-
bash
调用shell程序,直接读取
shell 程序 脚本 -
用路径的方式 (相对 绝对) 需要有x权限的文件 绿色
-
source 和 .
source + 脚本名 . + 脚本名 不建议使用会影响当前环境
1.4脚本错误调试
-
命令错误
- 不会影响脚本执行
-
语法错误
- 会影响脚本执行
-
逻辑错误
- 自己筛查
bash -n 脚本名称 (不在当前目录下加绝对路径) 检查语法错误 bash -x 脚本名称 (不在当前目录下加绝对路径) 逻辑错误
1.5重定向与管道符
1.5.1重定向
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
重定向的意思就是 ,不通过标准输出到屏幕上,输出到你指定的位置
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | 1> | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 标准错误输出结果追加到指定的文件尾部 | |
混合输出 | &>无论对错都可以重定向 | 将标准输出、标准错误的内容保存到同一个文件中 |
1.5.2管道符
管道符(P) "|" :连接两个程序
将左侧的命令输出结果,作为右侧命令的输入(处理对象),可以叠加使用
二、shell脚本的变量
2.1命名要求
-
区分大小写
-
不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
-
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
-
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
-
大驼峰 StudentFirstName
-
小驼峰 studentFirstName
-
下划线 student_name
1.赋值时使用双引号(" ")可以直接调用变量
2.赋值时使用单引号(' ')$只会被认为是字符$ 不会调用变量
3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同
4.{}可以分隔变量值
2.2read -p
方法1 [root@localhost opt]# read -p "现在的时间是" time 现在的时间是9点 [root@localhost opt]# echo $time 9点 方法2 [root@localhost opt]# vim 1.sh #!/bin/bash echo -n "请输入你的信息" read info echo $info
2.3变量作用范围
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用
方法:
- 格式1:export 变量名
- 格式2:export 变量名=变量值
可以使用pstree 查看shell的环境
输入bash进入子shell
ctrl+D组合exit 退出子shell
2.4整数的运算
运算符与变量之间必须有至少一个空格。 expr:专门运算符,只能进行整数的运算 格式: expr 变量1 运算符 变量2 [运算符 变量3]
[root@localhost ~]#vim js.sh [root@localhost ~]#bash js.sh #!/bin/bash read -p "请输入第一个整数:" num1 read -p "请输入第一个整数:" num2 sum=0 sum=`expr $num1 + $num2` echo "求和结果为:$sum"
2.5环境变量
- 由系统提前创建,用来设置用户的工作环境
- 可以使用env查看环境变量
- 需要记住的常用环境变量
$USER 表示用户名称 $HOME 表示用户的宿主目录 $LANG 表示语言和字符集 $PWD 表示当前所在工作目录 $PATH 表示可执行用户程序的默认路径
-
配置文件位置:/etc/profile、~/.bash_profile
-
/etc/profile:修改此文件会作用于所有用户
-
~/.bash_profile:用户独立的配置文件,修改此文件只作用于当前用户
-
2.6只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
2.7位置变量
$1..$n 注意10以上的位置变量
2.8预定义(状态)变量
- $*:表示所有位置参数的内容看成一个整体返回 返回所有 - $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有 - $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常 - $#:表示命令行中位置参数的总个数 - $0:表示当前执行的脚本或程序的名称 当前脚本的名字 - $$:当前进程id - $!: 后台任务最后一个id
本文作者:德国南部之星
本文链接:https://www.cnblogs.com/mtwm/p/17617279.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY