网站建设教学点,wordpress滑块验证码,做慕斯蛋糕那个网站有视频,外贸网站建设 公司价格目录 一.Shell
1.shell 的概念
2.Linux 中有哪些 Shell #xff1f;
二.Shell 脚本概述
1.Shell 脚本的概念
2.shell 脚本应用场景
3.shell 脚本的作用
三.Shell脚本的构成与执行
1.Shell脚本的构成
2.Shell脚本的执行
四.重定向与管道操作
1.交互式硬件设备
2.重…目录 一.Shell
1.shell 的概念
2.Linux 中有哪些 Shell
二.Shell 脚本概述
1.Shell 脚本的概念
2.shell 脚本应用场景
3.shell 脚本的作用
三.Shell脚本的构成与执行
1.Shell脚本的构成
2.Shell脚本的执行
四.重定向与管道操作
1.交互式硬件设备
2.重定向操作
3.操作实例
4.管道操作符号 |
五.Shell 变量的作用与类型
1.变量的作用:
2.变量的类型
(1)自定义变量由用户自己定义、修改和使用
(2)特殊变量
3.设置变量的作用范围
六.变量的运算
1.整数变量的运算
2.浮点数变量的运算
七.特殊的 Shell 变量
1.环境变量
2.只读变量
3.位置变量
4.预定义变量
拓展date 的用法 一.Shell
1.shell 的概念
Shell 是一个特殊的应用程序它介于操作系统内核与用户之间充当了一个“翻译官”的角色负责接收用户输入的操作指令命令并进行解释将需要执行的操作传递给内核执行并输出执行结果。
2.Linux 中有哪些 Shell
[rootlocalhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh shUNIX最初使用的 shell已经被bash所替换。 bash基准于GNU的框架下发展出的Shell是 sh 的扩展。 csh语法有点类似于c语言的Shell。 tcsh整合了csh提供更多的功能。 nologin奇怪的shell这个shell可以让用户无法登录主机。 注意 最常用的就是bash、tcsh、csh、sh、nologin这些shell都是依据Linux发展者的不同所创造出的不同版本。 bash/bin/bash是目前大多数 Linux 版本采用的默认 Shell。 为什么系统上合法的Shell要写入/etc/shells这个文件呢这是因为系统某些服务运行过程中会去检查用户能够使用的Shell而这些shell的查询就是借由/etc/shells这个文件。 用户什么时候可以取得shell来工作用户默认会取得哪一个shell当用户登录的时候系统就会给我一个shell让我来用而这个登录取得的Shell就记录在/etc/passwd这个文件内。 二.Shell 脚本概述
1.Shell 脚本的概念 将要执行的命令按顺序保存到一个文本文件 给该文件可执行权限 可结合各种 shell 控制语句以完成更复杂的操作 2.shell 脚本应用场景 重复性操作 交互性任务 批量事务处理 服务运行状态监控 定时任务执行 3.shell 脚本的作用 自动化运维 批量化重复操作可以编写脚本结合计划任务自动周期运行 减轻管理员工作量 提高处理文本文件的速度 避免配置出错 三.Shell脚本的构成与执行
1.Shell脚本的构成
1脚本申明解释器
若第一行为“ #!/bin/bash ”表示此行以下的代码语句是通过 /bin/bash 程序来解释执行
#!/bin/bash为默认解释器。还有其它类型的解释器比如#!/usr/bin/python、#!/usr/bin/expect。
2编写注释信息
以“#”开头的语句表示为注释信息被注释的语句在运行脚本时不会被执行。
3编写执行语句
按照顺序编写要执行的命令语句
4示例
[rootlocalhost opt]# vim 1.sh #创建并写入内容#!/bin/bash #脚本申明解释器#this is a example 2024-05-07 #编写注释信息 cd /boot/ #写入的执行语句
pwd
ls -lh vml*
2.Shell脚本的执行
1使用 bash 或 sh 指定脚本文件运行不要求文件必须有 x 执行权限
[rootlocalhost opt]# bash 1.sh
/boot
-rwxr-xr-x. 1 root root 6.5M 4月 25 16:08 vmlinuz-0-rescue-7629a26e6c83475ab9d3383c007e7f61
-rwxr-xr-x. 1 root root 6.5M 6月 28 2022 vmlinuz-3.10.0-1160.71.1.el7.x86_64
[rootlocalhost opt]#
2使用指定路径的命令来运行脚本要求文件必须有 x 执行权限
[rootlocalhost opt]# chmod x 1.sh #给文件授予执行的权限
[rootlocalhost opt]# ll #查看文件是否有执行权限
总用量 4
-rwxr-xr-x. 1 root root 72 5月 7 17:05 1.sh
[rootlocalhost opt]# /opt/1.sh #绝对路径运行文件
/boot
-rwxr-xr-x. 1 root root 6.5M 4月 25 16:08 vmlinuz-0-rescue-7629a26e6c83475ab9d3383c007e7f61
-rwxr-xr-x. 1 root root 6.5M 6月 28 2022 vmlinuz-3.10.0-1160.71.1.el7.x86_64[rootlocalhost opt]# ./1.sh #相对路径执行权限
/boot
-rwxr-xr-x. 1 root root 6.5M 4月 25 16:08 vmlinuz-0-rescue-7629a26e6c83475ab9d3383c007e7f61
-rwxr-xr-x. 1 root root 6.5M 6月 28 2022 vmlinuz-3.10.0-1160.71.1.el7.x86_64这两种方法是在子shell环境中执行脚本
拓展source 命令 在当前shell环境当中执行文件或脚本中的命令不要求文件有 x执行权限但是会切换到执行命令的目录中会在当前shell环境中执行脚本。
[rootlocalhost opt]# chmod -x 1.sh #去除文件的的x执行权限
[rootlocalhost opt]# ll
总用量 4
-rw-r--r--. 1 root root 72 5月 7 17:05 1.sh[rootlocalhost opt]# source 1.sh #source命令
/boot
-rwxr-xr-x. 1 root root 6.5M 4月 25 16:08 vmlinuz-0-rescue-7629a26e6c83475ab9d3383c007e7f61
-rwxr-xr-x. 1 root root 6.5M 6月 28 2022 vmlinuz-3.10.0-1160.71.1.el7.x86_64[rootlocalhost opt]# . 1.sh #.相对于source命令
/boot
-rwxr-xr-x. 1 root root 6.5M 4月 25 16:08 vmlinuz-0-rescue-7629a26e6c83475ab9d3383c007e7f61
-rwxr-xr-x. 1 root root 6.5M 6月 28 2022 vmlinuz-3.10.0-1160.71.1.el7.x86_64四.重定向与管道操作
1.交互式硬件设备
类型解释设备文件文件描述编号默认设备标准输入从该设备中接收用户通过键盘输入的信息/dev/stdin0键盘标准输出通过该设备向用户输出数据/dev/stdout1显示器标准错误输出通过该设备报告执行出错信息/dev/stder2显示器
2.重定向操作
类型操作符用途重定向输入从指定的文件中读取数据不是从键盘输入读取重定向输出将输出的结果保存在指定的文件中覆盖原文件将输出的结果追加在指定文件的末尾重定向错误输出2将错误信息保存在指定的文件覆盖原文件内容2将错误信息追加在指定文件的末尾混合输出、将标准输出和标准错误信息都保存在同一个文件中混合追加将正常和错误输出
3.操作实例
1标准输入
[rootlocalhost boot]# passwd test
更改用户 test 的密码 。
新的 密码 #使用键盘输入
无效的密码 密码少于 8 个字符
重新输入新的 密码
passwd所有的身份验证令牌已经成功更新。[rootlocalhost boot]# echo 1234567 | passwd --stdin test #使用--stdin 代替键盘
更改用户 test 的密码 。
passwd所有的身份验证令牌已经成功更新。
2重定向输入 从文件中读取数据交给命令使用
[rootlocalhost opt]# passwd --stdin test password.txt
更改用户 test 的密码 。
passwd所有的身份验证令牌已经成功更新。
3重定向输出 和 重定向追加
[rootlocalhost opt]# echo 123123 password.txt #重定向输出
[rootlocalhost opt]# cat password.txt
123123[rootlocalhost opt]# echo 123456 password.txt #重定向追加
[rootlocalhost opt]# cat password.txt
123123
123456
4重定向错误输出 2 2代表的是标准错误输出中的文件描述编号
[rootlocalhost opt]# ech 123456 password.txt #命令错误会出现报错信息
bash: ech: 未找到命令...
[rootlocalhost opt]# ech 123456 2 password.txt #不想报错出现使用 2 保存到文件中
[rootlocalhost opt]# cat password.txt
bash: ech: 未找到命令...[rootlocalhost opt]# echo 123456 2 password.txt
123456 #如果命令输入正确会将内容显示到屏幕中且覆盖文件
[rootlocalhost opt]# cat password.txt 内容但是文件不会存入信息因为2只会存放错误信息
[rootlocalhost opt]# 到文件中。
5重定向错误追加 2
[rootlocalhost opt]# ech 123456 2 password.txt #会保存一条错误信息
[rootlocalhost opt]# cat password.txt 一个会覆盖文件内容
bash: ech: 未找到命令...[rootlocalhost opt]# ech 123456 2 password.txt #会追加保存一条错误信息
[rootlocalhost opt]# cat password.txt
bash: ech: 未找到命令...
bash: ech: 未找到命令...6混合输出 和 混合追加输出
[rootlocalhost opt]# echo 123456 password.txt
[rootlocalhost opt]# cat password.txt
123456
[rootlocalhost opt]# echo 123456 password.txt # 和 是一样的效果
[rootlocalhost opt]# cat password.txt
123456[rootlocalhost opt]# ech 123456 password.txt #一个会覆盖文件内容
[rootlocalhost opt]# cat password.txt
bash: ech: 未找到命令...[rootlocalhost opt]# echo 123456 password.txt #两个是追加输出
[rootlocalhost opt]# cat password.txt
bash: ech: 未找到命令...
123456
拓展混合输出的方式21 将标准输出和错误输出都重定向到标准输出中
命令 文件 21 效果等效于混合输出ls -lh 标准输出 到屏幕 1 -- 屏幕
ls -lh test.txt 重定向输出 到 test.txt 1 -- test.txt
21 错误输出 重定向到 标准输出 2 -- 1
[rootlocalhost opt]# ls -lh password.txt 21
[rootlocalhost opt]# cat password.txt
总用量 8.0K
-rw-r--r--. 1 root root 47 5月 7 18:24 1
-rw-r--r--. 1 root root 72 5月 7 17:05 1.sh
-rw-r--r--. 1 root root 0 5月 7 18:27 password.txt
[rootlocalhost opt]# ls -lyh password.txt 21
[rootlocalhost opt]# cat password.txt
ls无效选项 -- y
Try ls --help for more information.#无论错误输出或标准输出都标准输出到这个文件中
4.管道操作符号 |
将管道符号“|”左侧的命令输出的结果作为右侧命令的输入处理对象同一行命令中可以使用多个管道。
[rootlocalhost opt]# ss -lntp | grep 22
LISTEN 0 5 192.168.122.1:53 *:* users:((dnsmasq,pid1790,fd6))
LISTEN 0 128 *:22 *:* users:((sshd,pid1202,fd3))
LISTEN 0 128 [::]:22 [::]:* users:((sshd,pid1202,fd4))
有些命令则需要管道符后面要有xargs命令来执行传递参数如 rm 删除命令
[rootlocalhost opt]# ls /opt/ | rm -rf
[rootlocalhost opt]# ll
总用量 4
-rw-r--r--. 1 root root 66 5月 7 18:34 password.txt
[rootlocalhost opt]# ls /opt/ | xargs rm -rf
[rootlocalhost opt]# ll
总用量 0
五.Shell 变量的作用与类型
1.变量的作用:
用来存放系统和用户需要使用的特定参数(值) 变量名:使用固定的名称由系统预设或用户定义 变量值:能够根据用户设置、系统环境的变化而变化 2.变量的类型
(1)自定义变量由用户自己定义、修改和使用
定义一个新的变量 [rootlocalhost opt]# 123ABCabc #变量名要以字母或者下划线开头
bash: 123ABCabc: 未找到命令...
[rootlocalhost opt]# ABC123abc
[rootlocalhost opt]# _123abc123456 #字母区分大小写
[rootlocalhost opt]# _123ABC654321 不同的是不一样的变量值[rootlocalhost opt]# echo $_123abc #用echo $符号放在变量名前
123456 就可以查看变量值
[rootlocalhost opt]# echo $_123ABC
654321
[rootlocalhost opt]# echo $ABC123
abc
[rootlocalhost opt]#
同时查看多个变量
[rootlocalhost opt]# a123
[rootlocalhost opt]# babc
[rootlocalhost opt]# echo $a$b
123abc
[rootlocalhost opt]# echo $aabc #无法查看[rootlocalhost opt]# echo ${a}abc #再变量名两边加上大括号之后就可以了
123abc
[rootlocalhost opt]# 如果想要两个变量的值进行交换的操作
先准备一个临时变量c 先把c$a再把a$b、b$c即可完成两个变量之间的交换
[rootlocalhost opt]# alll
[rootlocalhost opt]# bppp
[rootlocalhost opt]# c$a
[rootlocalhost opt]# echo $a
lll
[rootlocalhost opt]# a$b
[rootlocalhost opt]# b$c
[rootlocalhost opt]# echo $b
lll
[rootlocalhost opt]# echo $a
ppp
[rootlocalhost opt]#
从键盘输入内容为变量赋值
read [-p 提示信息] 变量名 从键盘输入中获取变量值 #read 的常用选项
[rootlocalhost opt]# read --help
-bash: read: --: 无效选项
read: 用法:read
[-ers]
[-a 数组]
[-d 分隔符]
[-i 缓冲区文字]
[-n 读取字符数]
[-N 读取字符数]
[-p 提示符]
[-t 超时]
[-u 文件描述符]
[名称 ...][rootlocalhost opt]# read -p 请输入变量myname的值 myname
请输入变量myname的值liu
[rootlocalhost opt]# echo $myname
liu
[rootlocalhost opt]# 赋值时使用引号 双引号:允许通过$符号引用其他变量值 单引号:禁止引用其他变量值$视为普通字符 反撇号:命令替换提取命令执行后的输出结果 [rootlocalhost opt]# echo $a
ppp
[rootlocalhost opt]# echo $a #双引号允许使用$引用变量
ppp
[rootlocalhost opt]# echo $a #单引号禁止引用变量$视为普通符号
$a
[rootlocalhost opt]# ldd which sshd #反撇号命令替换提取命令执行后的结果linux-vdso.so.1 (0x00007fff039cc000)libfipscheck.so.1 /lib64/libfipscheck.so.1 (0x00007f2d182da000)libwrap.so.0 /lib64/libwrap.so.0 (0x00007f2d180cf000)libaudit.so.1 /lib64/libaudit.so.1 (0x00007f2d17ea6000)libpam.so.0 /lib64/libpam.so.0 (0x00007f2d17c97000)
................................下面省略.........................#效果和$()一样
[rootlocalhost opt]# ldd $(which sshd)linux-vdso.so.1 (0x00007ffcce39f000)libfipscheck.so.1 /lib64/libfipscheck.so.1 (0x00007f4e6b0c0000)libwrap.so.0 /lib64/libwrap.so.0 (0x00007f4e6aeb5000)libaudit.so.1 /lib64/libaudit.so.1 (0x00007f4e6ac8c000)libpam.so.0 /lib64/libpam.so.0 (0x00007f4e6aa7d000)
................................下面省略.........................
(2)特殊变量
环境变量、只读变量、位置变量、预定义变量
3.设置变量的作用范围
默认情况下我们在 she ll环境中定义的变量都是局部变量只在当前环境中有效进入到其他的shell 环境中就会失效。
[rootlocalhost yum.repos.d]# loginusers$(who | wc -l)
[rootlocalhost yum.repos.d]# echo $loginusers
2
[rootlocalhost yum.repos.d]# bash #切换shell环境
[rootlocalhost yum.repos.d]# echo $loginusers #命令失效[rootlocalhost yum.repos.d]# exit #退出当前环境
exit
[rootlocalhost yum.repos.d]# echo $loginusers #命令成功
2
[rootlocalhost yum.repos.d]#
如果想要变量在所有 shell 环境中有效可以在变量前面加个 export 将变量导出为全局变量
两种格式可以混合使用格式1export 变量名...格式2export 变量名变量值...
[rootlocalhost yum.repos.d]# export loginusers
[rootlocalhost yum.repos.d]# echo $loginusers
2
[rootlocalhost yum.repos.d]# bash #切换shell环境
[rootlocalhost yum.repos.d]# echo $loginusers #任然有效
2
[rootlocalhost yum.repos.d]# bash #再次切换两次环境
[rootlocalhost yum.repos.d]# bash
[rootlocalhost yum.repos.d]# echo $loginusers #命令任然有效
2
[rootlocalhost yum.repos.d]# 但是 export 只在当前会话中有效如果打开其他会话界面就会失效如果想要变量在所有的shell 环境中有效有两种办法。
【1】 进入到 /etc/bashrc 文件中加入配置每次切换shell环境都会执行这个文件中的配置
[rootlocalhost yum.repos.d]# vim /etc/bashrc
........................省略................................
在文件末尾位置加入配置
loginusers$(who | wc -l)
之后保存退出到其他会话实验
[rootlocalhost yum.repos.d]# bash #切换环境
[rootlocalhost yum.repos.d]# echo $loginusers #命令成功
3
[rootlocalhost yum.repos.d]# 切换 shell 环境自动生效
【2】进入到 /etc/profile 文件中加入配置只要用户登录就会自动执行该文件中的命令
[rootlocalhost yum.repos.d]# vim /etc/profile
........................省略................................
在文件末尾位置加入配置
export loginusers$(who | wc -l)
之后保存退出到其他会话实验[rootlocalhost ~]# echo $loginusers #断开重连后命令依旧有效
3
[rootlocalhost ~]# bash
[rootlocalhost ~]# echo $loginusers
3
[rootlocalhost ~]#
如果想要立即生效可以使用 source 命令 或者 重新登录系统自动生效
六.变量的运算
1.整数变量的运算
expr 变量1 运算符号 变量2 [运算符号 变量3].... 中间一定要有空格
常用的运算符号
加法运算:
减法运算 -
乘法运算 \*
除法运算 /
取余数运算 %
[rootlocalhost ~]# expr 12 5 3
20
[rootlocalhost ~]# expr 20 - 5
15
[rootlocalhost ~]# expr 20 \* 5
100
[rootlocalhost ~]# expr 20 / 5
4
[rootlocalhost ~]# expr 20 % 3
2
注意 shell默认只支持整数变量运算浮点数运算不支持
[rootlocalhost yum.repos.d]# expr 12 \* 5.5
expr: 非整数参数1使用$符号进行整数变量的运算
[rootlocalhost yum.repos.d]# a12
[rootlocalhost yum.repos.d]# b5
[rootlocalhost yum.repos.d]# expr $a $b
17
[rootlocalhost yum.repos.d]# expr $a - $b
7
[rootlocalhost yum.repos.d]# expr $a \* $b
60
[rootlocalhost yum.repos.d]# expr $a % $b
2
[rootlocalhost yum.repos.d]# expr $a / $b
2 #expr不支持小数运算2使用$[]符号进行整数变量的运算
[rootlocalhost yum.repos.d]# a12
[rootlocalhost yum.repos.d]# b5
[rootlocalhost yum.repos.d]# echo $[12 5]
17
[rootlocalhost yum.repos.d]# echo $[12 - 5]
7
[rootlocalhost yum.repos.d]# echo $[12 /* 5] #在中括号中乘法可以不加\
bash: 12 /* 5: 语法错误: 期待操作数 错误符号是 * 5
[rootlocalhost yum.repos.d]# echo $[12 * 5]
60
[rootlocalhost yum.repos.d]# echo $[12 % 5]
2[rootlocalhost yum.repos.d]# echo $[125] #在中括号中可以不用空格也可以运算
17
[rootlocalhost yum.repos.d]# echo $[$a$b] #在中括号中使用$a$b也可以运算
17
[rootlocalhost yum.repos.d]# echo $[ab] #在中括号中步使用$ab也可以运算
17
3使用$符号进行整数变量的运算
[rootlocalhost yum.repos.d]# a12
[rootlocalhost yum.repos.d]# b5
[rootlocalhost yum.repos.d]# echo $((125))
17
[rootlocalhost yum.repos.d]# echo $((12-5))
7
[rootlocalhost yum.repos.d]# echo $((12*5))
60
[rootlocalhost yum.repos.d]# echo $((12%5))
2#$用法和中括号$[]差不多一致
4使用 let 命令运算但是必须赋予一个变量let 变量变量 运算符号 变量
[rootlocalhost yum.repos.d]# let i125
[rootlocalhost yum.repos.d]# echo $i
17
[rootlocalhost yum.repos.d]# let i12-5
[rootlocalhost yum.repos.d]# echo $i
7
[rootlocalhost yum.repos.d]# let i12*5
[rootlocalhost yum.repos.d]# echo $i
60
[rootlocalhost yum.repos.d]# let i12%5
[rootlocalhost yum.repos.d]# echo $i
2
let 的其他运算方法 let a、a--、a2、a-2、a*2
[rootlocalhost yum.repos.d]# a10
[rootlocalhost yum.repos.d]# a$[a1]
[rootlocalhost yum.repos.d]# echo $a
11
[rootlocalhost yum.repos.d]# let a #等于$[a1]
[rootlocalhost yum.repos.d]# echo $a
12
[rootlocalhost yum.repos.d]# let a-- #等于$[a-1]
[rootlocalhost yum.repos.d]# echo $a
11
[rootlocalhost yum.repos.d]# let a2 #等于$[a2]
[rootlocalhost yum.repos.d]# echo $a
13
[rootlocalhost yum.repos.d]# let a-2 #等于$[a-2]
[rootlocalhost yum.repos.d]# echo $a
11
[rootlocalhost yum.repos.d]# let a*2 #等于$[a*2]
[rootlocalhost yum.repos.d]# echo $a
222.浮点数变量的运算
1bc 工具的使用
原因Bash只支持对整数的运算不支持浮点运算而 bc 计算器可以很方便的进行浮点运算
[root192 ~]# rpm -q bc #确认是否安装
bc-1.06.95-13.el7.x86_64[root192 ~]# echo 1.12.2
1.12.2
[root192 ~]# echo 1.12.2 | bc
3.3
[root192 ~]# echo 1.1*2.2 | bc
2.4
[root192 ~]# echo 1.12*2.2 | bc
2.46
2scalen 的使用
如果想保留多少位小数可以使用 scalen 来指定小数的保留位数。
[root192 ~]# echo scale4;4.3/2.5 | bc
1.7200
[root192 ~]# echo scale3;4.3/2.5 | bc
1.720
3awk 工具的使用
格式awk BEGIN{print 算术表达式}最多可保留小数后五位。
[root192 ~]# awk BEGIN{print 4.52.2}
6.7
[root192 ~]# awk BEGIN{print 4.5-2.2}
2.3
[root192 ~]# awk BEGIN{print 4.5*2.2}
9.9
[root192 ~]# awk BEGIN{print 4.5%2.2}
0.1
[root192 ~]# awk BEGIN{print 4.5/2.2}
2.04545
[root192 ~]# awk BEGIN{print (4.5-2.2)*210} #混合运算
14.6七.特殊的 Shell 变量
1.环境变量
由系统提前创建用来设置用户的工作环境
配置文件/etc/profile、~/.bash_profile
1查看所有的环境变量 env 命令 2常见的环境变量 PWD、PATH、USER、SHELL、HOME 其中用处最为广泛的环境变量为$PATH 表示可执行文件的默认路径
[rootlocalhost ~]# echo $PATH #PATH环境变量保存Linux命令的搜索路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[rootlocalhost ~]# echo $USER #查看当前正在使用的用户
root #效果和whoami一样
[rootlocalhost ~]# su - liu
[liulocalhost ~]$ echo $USER
liu
[liulocalhost ~]$ [rootlocalhost ~]# echo $SHELL #查看当前的shell环境
/bin/bash[rootlocalhost ~]# echo $HOME #查看当前用户的家目录
/root
[rootlocalhost ~]# su - liu
上一次登录三 5月 8 16:24:10 CST 2024pts/1 上
[liulocalhost ~]$ echo $HOME
/home/liu[rootlocalhost ~]# echo $LANG #查看当前使用的语言和文字
zh_CN.UTF-8
[rootlocalhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[rootlocalhost ~]# export PATH$PATH:/opt #将opt目录加入到环境变量中
[rootlocalhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt#退出当前shell环境后失效
2.只读变量
用于变量值不允许被修改的情况
格式 readonly 变量名变量值 #只读变量不允许被修改变量值和删除变量
[rootlocalhost ~]# a10
[rootlocalhost ~]# echo $a
10
[rootlocalhost ~]# a20
[rootlocalhost ~]# echo $a
20
[rootlocalhost ~]# readonly a #设置a为只读变量
[rootlocalhost ~]# a30 #a不能被修改
-bash: a: 只读变量
[rootlocalhost ~]# echo $a
20
[rootlocalhost ~]# unset a #a无法被删除
-bash: unset: a: 无法反设定: 只读 variable只有重启才能取消只读变量
3.位置变量
表示为 $n ,n为1-9之间的数字 [rootlocalhost opt]# ./test.sh one two three four five six seven eight nine
./test.sh
one
two
three
four
five #一个数字对应一个数值
six
seven
eight
nine
[rootlocalhost opt]# ./test.sh 1 2 3 4 5 6 7 8 9
./test.sh
1
2
3
4
5
6
7
8
9
[rootlocalhost opt]#
注意数字是以1为开头。1-9是正常跟在$后面即可。当数字大于或等于10要用{ }进行使用区别shell误识别。
[rootlocalhost opt]# ./test.sh one two three four five six seven eight nine ten
./test.sh
one
two
three
four
five
six
seven
eight
nine
one0
[rootlocalhost opt]# vim test.sh
#!/bin/bashecho $0
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo ${10} #使用{} 不然含义就是 $1 加上字符 1[rootlocalhost opt]# ./test.sh one two three four five six seven eight nine ten
./test.sh
one
two
three
four
five
six
seven
eight
nine
tenecho $[${10} ${11}] #如果想使用运算可以这样子使用num1${10} #进行多个运算第一种方式太过繁琐
num2${11} 可以提前定义好变量值
echo $[num1 num2]
4.预定义变量
1$0 代表脚本本身
2$# 代表脚本后面跟的位置参数的数量
[rootlocalhost opt]# ./test1.sh
./test1.sh‘########’
0
[rootlocalhost opt]# ./test1.sh 1 2 3 4
./test1.sh
1‘########’
4
[rootlocalhost opt]# ./test1.sh 1 2 3 4 5
./test1.sh
1‘########’
5
[rootlocalhost opt]# ./test1.sh 1 2 3 4 5 6
./test1.sh
1‘########’
6
3$? 代表的是上一条Linux命令执行的返回状态码0~2550表示上一条命令执行正确非0值则表示上一条命令执行异常
[rootlocalhost opt]# echo $?
127
[rootlocalhost opt]# ls -alh
总用量 8.0K
drwxr-xr-x. 2 root root 37 5月 8 17:16 .
dr-xr-xr-x. 17 root root 224 4月 25 16:09 ..
-rwxr-xr-x. 1 root root 69 5月 8 17:16 test1.sh
-rwxr-xr-x. 1 root root 159 5月 8 17:09 test.sh
[rootlocalhost opt]# echo $?
0
[rootlocalhost opt]#
4$* 默认代表脚本后面跟的所有参数加上双引号后 $* 会把所有参数看做一个整体
5$ 默认代表脚本后面跟的所有参数加上双引号后 $ 还是会把每个参数看做
[rootlocalhost opt]# vim test2.sh
#!/bin/bash
echo 不加引号时
echo #### $* ####
for i in $*
doecho $i
doneecho #### $ ####
for i in $
doecho $i
done
[rootlocalhost opt]# ./test2.sh one two three four five six
不加引号时
#### one two three four five six ####
one
two
three
four
five
six
#### one two three four five six ####
one
two
three
four
five
six[rootlocalhost opt]# vim test2.sh
#!/bin/bash
echo 加引号时
echo #### $* ####
for i in $*
doecho $i
doneecho #### $ ####
for i in $
doecho $i
done
[rootlocalhost opt]# ./test2.sh one two three four five six
加引号时
#### one two three four five six ####
one two three four five six
#### one two three four five six ####
one
two
three
four
five
six
拓展date 的用法
date %Y%m%d 当天日期
date -d -1 day %Y%m%d 昨天日期
date %Y%m01 当月第一天
date -d 1 month %Y%m01 下个月第一天
date -d $(date -d 1 month %Y%m01) -1 day %Y%m%d 当月最后一天
[rootlocalhost opt]# date %Y%m%d
20240508
[rootlocalhost opt]# date -d -1 day %Y%m%d
20240507
[rootlocalhost opt]# date %Y%m01
20240501
[rootlocalhost opt]# date -d 1 month %Y%m01
20240601
[rootlocalhost opt]# date -d $(date -d 1 month %Y%m01) -1 day %Y%m%d
20240531
[rootlocalhost opt]#