shell脚本变量

一、Shell脚本基础

1.1 shell的作用

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

1.2 shell脚本简介

1.2.1 什么是shell脚本?

Shell脚本是一种用于编写和执行命令序列的脚本语言 Shell脚本可以通过文本文件的形式保存,并使用shell解释器来执行。 Shell脚本可以包含命令、条件判断、循环、函数等,可以使用变量、数组、字符串处理、文件操作等功能。

1.2.2 应用场景

将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率 减少手工命令的重复输入,一定程度上避免人为错误 将软件或应用的安装及配置实现标准化 用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

1.3 Shell脚本构成

以一个简单的shell脚本为例

#!/bin/bash
​
#打印当前日期和时间
​
echo "当前日期和时间:"
date
​
#创建一个目录
​
mkdir test
​
#进入该目录
​
cd test
​
#创建一个文件并写入内容
​
echo "Hello, World!" > t1.txt
​
#显示文件内容
​
cat t1.txt

#!/bin/bash 使用Bash解释器执行脚本。

echo "当前日期和时间:" 使用echo命令打印一段文本,即"当前日期和时间:"。

date 输出当前的日期和时间。

mkdir mydirectory 创建一个名为test的目录。

cd test 进入test目录。

echo "Hello, World!" > myfile.txt 将"Hello, World!"写入到t1.txt文件中

cat myfile.txt显示t1.txt文件的内容。

1.4 Shell脚本执行方式

以/test/t1.sh为例 1 想要用tab键补全脚本名,需要做软链接,将目标脚本链接到$PATH的目录下。 1

1.4.1 路径方式 (需要赋予执行权限)

绝对路径

/test/t1.sh 相对路径

cd /test ./t1.sh

1.4.2 指定shell解释器去执行(不需要权限)

bash /test/t1.sh

1.4.3 source 和 . (不需要权限)

source命令会直接在当前shell中执行脚本文件的内容,会直接影响当前shell的环境,所以不推荐用这种方式。

#执行方式三#
source 脚本名(绝对路径)
​
source /test/t1.sh 
或者
. /test/t1.sh 

1.5 Shell脚本错误调试

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

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

逻辑错误 只能使用 bash -x 进行排错。 bash -x #模拟执行,可以逐条排错

bash -n #检查语法错误

二、重定向与管道符

2.1 重定向

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据

  • 标准输出:通过该设备向用户输出数据

  • 标准错误:通过该设备报告执行出错信息

重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置(文件 其他输出设备)

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

2.2 管道符

管道符     命令1  |  命令2   
​

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

三、Shell脚本变量

3.1 变量简介

3.1.1 作用

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

3.1.2 变量类型

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

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

3.2 自定义变量

3.2.1 定义新变量
变量名=变量值 
#=号前后不能有空格
​
3.2.2 查看自定义的变量

echo $变量名

#查看变量值

[root@localhost ~]# name=xkj
[root@localhost ~]# echo $name
xkj
​
3.2.3 赋值时的特殊符号

1.赋值时使用双引号(" ")可以直接调用变量

2.赋值时使用单引号(' ')变量$只会被认为是字符$ 不会调用变量

3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同

4.{}可以分隔变量值

单引号不识别 变量

双引号可以识别变量

{} 可以确定变量的范围

`` $() 调用命令执行的结果

3.2.4 read -p

read -p 是一个常用的Bash命令,用于从用户输入中读取值并将其存储在变量中。 -p 选项用于显示提示信息,提示用户输入。

[root@localhost ~]# . xkj.sh 
请输入你的名字:xkj
你好,xkj! 
​
3.2.5 将局部变量变为全局变量

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

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

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

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

3.3 环境变量

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

env   #可以看到当前所有的环境变量
3.3.1 环境变量的全局配置文件
#配置文件位置
/etc/profile 
##修改此文件,全局生效,可用于长期变更或设置环境变量
​

3.4 只读变量

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

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

3.5 位置变量

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

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

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

#以shell脚本为例
#!/bin/bash
echo "$1"            #位置1
echo "$2"            #位置2
echo "$3"            #位置3
echo "${10}"         #位置10
echo "$10"           #位置1和0
​

3.6 预定义变量(重要)

  • $*:表示所有位置参数的内容看成一个整体返回 返回所有

  • $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有

  • $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

  • $#:表示命令行中位置参数的总个数

  • $0:表示当前执行的脚本或程序的名称 当前脚本的名字

  • $$:当前bash的进程id

  • $!: 后台任务最后一个id

3.7 整数运算

#运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取余
​
#运算法则
加法:num1 + num2
减法:num1 - num2
乘法:num1 \ * num2
整除:num1 / num2
取余(求模):num1 % num2 (求 num1 除以 num2 的余数)
​
#变量和运算符之间要用空格隔开
#expr只能进行整数的运算
#格式
expr 变量1 运算符 变量2 [运算符 变量3]

i++和++i

i=1;j=1;let j=i++;echo $i $j
2 1
i=1;j=1;let j=++i;echo $i $j
2 2
​

四、简单的Shell脚本

4.1 使用shell脚本搭建本地yum仓库

#脚本名称 lyum.sh
#脚本内容#
​
#!/bin/bash
 
mount /dev/sr0 /mnt
​
cd /etc/yum.repos.d
​
mkdir backup
mv *.repo backup
​
echo "
[local]
name=local
baseurl=file:///mnt
grpcheck=0
" > local.repo
​

五、部分文本处理工具

1.1 tr命令

tr命令用于字符转换或字符删除。

基本格式

tr [选项] 字符集1 字符集2 #字符集1 是要被替换或删除的字符集 #字符集2 是要替换为的字符集

常用选项

-c 除了指定的字符之外的所有字符都会被替换 -d 表示删除指定的字符 -s 表示压缩重复的字符为单个字符

[root@localhost /]# echo 123 |tr 1  2
223
​
#将文本中的空格合并为单个空格
[root@localhost /]# echo "Hello    World" | tr -s ' '
Hello World
#删除文本中的特殊字符
[root@localhost /]# echo "Hello @#World" | tr -d '@#'
Hello World
​

1.2 cut命令

cut命令可以提取文本数据中指定的列。 cut命令可以根据指定的字符位置或指定的字段分隔符来截取文本,并将结果输出到标准输出或指定的文件。

基本格式

cut [选项] 文件

-d 指定字段的分隔符,默认为制表符。 -f 指定要提取的字段列表,字段列表之间使用逗号分隔,例如-f 1,3,5 -c 指定要提取的字符位置列表,字符位置列表之间使用逗号分隔,例如-c 1-5,10-15 --complement 提取指定字段或字符位置之外的内容

#提取文件的第一列
​
cut -f1 file.txt
​
​
#提取文件的第二、四、五列,并使用逗号作为分隔符
​
cut -f2,4,5 -d',' file.txt
​
​
#提取文件的前五个字符:
​
cut -c1-5 file.txt
​
​
# 提取文件的第一列以外的所有列:
​
cut -f 2 --complement file.txt
​

1.3 sort命令

sort命令用于对文本文件进行排序,默认以字母排序

基本格式

sort [选项] file

常用选项

-b 忽略行首空白字符 -r 以倒序方式进行排序 -f 忽略大小写进行排序 -n 按照数值大小进行排序 -u 去除重复行 -t 指定字段分隔符 -k 指定按照字段排序

1.4 uniq命令

uniq 命令用于找出或删除文本文件中连续出现的重复行

基本格式

uniq [选项] [输入文件 [输出文件]]

#如果不指定输入文件,则会从标准输入获取数据 #如果不指定输出文件,则结果会打印到标准输出

常用选项

-c 在输出结果中显示每行重复出现的次数。 -d 只显示重复行。 -u 只显示不重复的行。

[root@localhost /]# df|grep "sd"|tr -s " "|cut -d " " -f5|cut -d "%" -f1
18
#查看磁盘利用率
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值