Shell脚本

发布于:2024-06-30 ⋅ 阅读:(14) ⋅ 点赞:(0)

文本处理工具

tr 替换 压缩 删除功能
tr 1 a 遇到1换成a
tr -s 压缩
tr -d 删除
seq 10 打印10个数字
seq -s + 100 |bc 算出1到100的和
cut 切列
cut -d 指明分隔符
cut -f 获取想要的字段

注意cut 不能将连续的字符当做分隔符

sort 排序 默认不是以数字排序
-n 执行按数字大小整理
-r 倒序显示

uniq 去重 只能将连续的重去掉

shell 的作用

Shell(壳) 是一类程序的总称,用于将人类使用的高级语言转换成机器能看懂的二进制语言,为用户和内核之间的交互提供接口

不同的shell内部指令、运行环境等会有所区别

shell 脚本的组成

解释器:第一行开头“#!/binbash"表示一下代码语句是通过/bin/bash程序来解释执行

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

执行的命令:比如echo命令用于输出” “之间的字符串

#!/bin/bash

echo  “hello world”
[root@localhost ~]# vim l1.sh
#!/bin/bash
echo "当前日期和时间:"
date
[root@localhost ~]# bash l1.sh
当前日期和时间:
2024年 05月 09日 星期四 09:59:15 CS

执行脚本

1.直接使用 shell 程序来读取脚本命令不需要执行权限

2.使用路径执行 绝对路径 相对路径 需要权限

3.source和 . 点等于source 不需要使用权限

第一和第二钟执行方式不会影响当前环境中bash设置,会开启一个新的bash环境

不推荐使用source 会影响当前bash环境中的配置

脚本错误调试

1.命令错误

命令出错不会影响接下来的命令继续

2.语法错误·

会影响接下来的命令继续

3.逻辑错误

只能自己去筛查代码是否正确

总结:

1.语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的

2.命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

3.逻辑错误:只能使用 bash -x 进行

set -e

在脚本的前面输入set -e 一旦出错立即停止

重定向

标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stder e 显示器

重定向操作

类型 操作符 用途
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出 1> 将输出结果保存到指定的文件(覆盖原有内容)
>> 将输出结果追加到指定的文件尾部
标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容)
2>> 标准错误输出结果追加到指定的文件尾部
混合输出 &>无论对错都可以重定向 将标准输出、标准错误的内容保存到同一个文件中

管道符

将管道符号“|”左侧的命令输出的结果,作呕为右侧命令的输入(处理对象),同一行命令可以使用多个管道。

类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器
  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息

重定向操作

类型 操作符 用途
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出 1> 将输出结果保存到指定文件(覆盖原有内容)
>> 将输出结果追加到指定的文件尾部
标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容)
2>> 标准错误输出结果追加到指定的文件尾部
混合输出 &>无论对错都可以重定向 将标准输出、标准错误的内容保存到同一个文件中

Shell脚本变量

作用

Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化

变量类型

  • 自定义变量:由用户自己定义,修改和使用

  • 特殊变量:环境变量、只读变量、位置变量、预定义变量

自定义变量

变量名等于变量值

例子:

a=10 定义了一个新变量,变量名a,变量值为10

调用变量

echo $cto

echo $变量名

特殊符号

{} 确定了变量起始结束的范围,只要有变量就加
“ ” 弱引用可以识别变量
’ ‘ 强引用不识别变量
`` 反撇 调用命令执行结果 效果与{}$相同

取消变量

unset 变量名

read -p

是一个常用的bash命令,用于从用户输入中读取值并将其存储在变量中

-p 选项用于显示提示信息,提示用户输入

[root@localhost data]# vim mz.sh
#!/bin/bash

read -p "请输入你的名字:" name
echo "你好,$name!"
:wq
[root@localhost data]# bash mz.sh
请输入你的名字:lisi
你好,lisi!

将局部变量变为全局变量

局部变量:新定义的变量只在当前的shell环境中有效,当进入子程序或新的shell环境中,局部变量将无法再起作用

全局变量:在新的shell环境中可以继续使用

通过内部命令export将局部变量为全局变量

格式1:export 变量名

格式2:export 变量名=变量值

环境变量

环境变量由系统提前创建,用来设置用户的工作环境

环境变量的全局配置文件

#配置文件位置
/etc/profile 
##修改此文件,全局生效,可用于长期变更或设置环境变量

只读变量

将变量声明为只读(read-only)后,不能再修改变量的值

readonly 变量名 #将变量声明为只读变量

位置变量

$1, $2, $3, … $n 表示命令行参数的位置值

$1 表示第一个参数,$2 表示第二个参数,以此类推。

当n大于9时,需要加上{ },比如第十个位置,要用 ${10}表示

预定义变量

状态变量 功能
$* 表示所有位置参数的内容堪称一个整体返回
$@ 表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
$? 表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$# 表示命令行中位置参数的总个数
$0 表示当前执行的脚本或程序的名称即程序本身
$$ 当前进程id
$! 后台任务最后一个id

网站公告

今日签到

点亮在社区的每一天
去签到