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脚本的构成

构成

  1. 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器,还有其他类型的解释器,#!/bin/python #!/bin/expect

  2. 注释信息:以#开头的语句表示为注释信息

  3. 可执行语句:比如echo命令用于输出" "之间的字符串

[root@localhost ~]#vim test.sh

#!/bin/bash
#the first shell
echo "hello world"
[root@localhost ~]#bash test.sh
hello world

1.3shell脚本的执行逻辑和方式

脚本执行逻辑

  1. 顺序执行:程序按从上到下顺序执行

  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

脚本执行方式

  1. bash
    调用shell程序,直接读取
    shell 程序 脚本

  2. 用路径的方式 (相对 绝对) 需要有x权限的文件 绿色

  3. 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. 格式1:export 变量名
  2. 格式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环境变量

  1. 由系统提前创建,用来设置用户的工作环境
  2. 可以使用env查看环境变量
  3. 需要记住的常用环境变量
$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 中国大陆许可协议进行许可。

posted @   德国南部之星  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑