shell脚本编程(三)

shell脚本编程(二)https://blog.csdn.net/xiaochenXIHUA/article/details/156656425?spm=1001.2014.3001.5501

一、变量与配置

1.1、环境变量基础

|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 说明 |
| 1 | bash #定义环境变量 ENVIRON-VARIABLE=value #环境变量赋值 export ENVIRON-VARIABLE #声明环境变量 |
| 2 | 清除环境变量同样是【unset】命令(unset 环境变量名)。 |
| 3 | 【env】命令可以列出已经定义的环境变量。 |
| 4 | 查看环境变量内容 bash #查看环境变量内容命令 echo $环境变量名 |
| 5 | bash #常见系统环境变量 #1-记录了一系列的目录列表,shell为每个输入命令搜索PATH中的目录列表 PATH #2-记录当前用户的根目录 HOME #3-记录当前的目录路径,当利用cd命令改变当前目录时,系统自动更新PWD的值 PWD #4-记录旧的工作目录,即用户所处的前一个目录 OLDPWD #5-SHELL变量保存缺省shell,缺省的值为/bin/bash SHELL #6-默认的解释器 BASH #7-系统默认的语言编码格式 LANG #8-系统当前的用户名称 USER #9-系统当前的主机名称 HOSTNAME #10-USER和UID是保存用户信息的环境变量,USER表示已登录用户的名称,UID表示已经登录用户的ID USER UID #11-PPID是创建当前进程的进程号(即当前进程的父进程号) PPID #12-PS1和PS2是提示符变量,用于设置提示符格式 #PS1是用于设置一级shell提示符的环境变量(也称为主提示符字符串)PS1的变量是 [\u@\h \W]\$ 表示特定的含义: #【\u】表示当前用户名;【\h】表示主机名;【\W】表示当前目录名;【\$】表示若是root用户则显示#号,若是其他用户则显示$号 PS1 PS2 |
| 6 | 《1》环境变量可以在命令行中设置,但用户注销时这些值将丢失。 《2》环境变量均为大写。 《3》必须用export命令导出 |
[环境变量]

1.2、重要的配置文件

【$HOME/.bash_profile】是最重要的配置文件,当某Linux用户登录时,shell会首先执行系统默认的配置文件【/etc/profile】,然后会自动执行【.bash_profile】文件,若.bash_profile文件不存在,则接着读取【~/.bashrc】文件。

若要使新加入的行立即生效,需要利用source命令执行【.bash_profile】文件;source命令也被称为"点命令"(即:句点符号【.】);source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

bash 复制代码
#让修改的用户自己的配置文件立即生效命令:
#方法一:
source .bash_profile

#方法二:将source替换为句号【.】句号后面用空格与文件名称分隔
. .bash_profile    

初始化环境变量文件的顺序是【全局环境变量(/etc/profile)】-->【用户个人环境变量(~/.bash_profile)】-->【用户个人环境变量(~/.bashrc)】-->最后是【/etc/bashrc】如下图所示:

1.3、位置参数变量

位置参数(positional parameters)是一种特殊的shell变量,用于从命令行向shell脚本传递参数。

bash 复制代码
#位置参数变量
#1-【$0】表示脚本的名字

#2-【$1】表示第一个参数

#3-【$2】表示第二个参数

#4-从【${10}】开始,参数号需要用大括号括起来(如:${10}、${11}、${100}、。。。)

位置参数的用途如下:

《1》从shell命令/脚本的命令行接受参数;

《2》在调用shell函数时为其传递参数。

1.4、内部参数变量

|--------|---------|--------------------------------------------|
| 序号 | 符号 | 说明 |
| 命令行相关参数变量 |||
| 1 | **@** | 表示传递给脚本或函数的所有参数。被双引号(" ")包含时,与【*】稍有不同 |
| 2 | \*** | 表示传递给脚本或函数的所有参数 | | 3 | **0 | 命令行上输入的shell程序名称 |
| 4 | #** | 表示命令行上参数的个数 | | 【*】与【@】都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以【"1" "2" "3" ... "n" 】的形式输出所有参数。 **但是当它们被双引号(" ")包含时:** 《1》【"*"】会将所有的参数作为一个整体,以【"1 2 3 ... n"】的形式输出所有参数。 《2》【"@"】会将各个参数分开,以【"1" "2" "3" ... "n" 】的形式输出所有参数。 ||| | ||| | **进程状态相关参数变量** ||| | 1 | **? | 表示上一条命令执行后的返回值: 《1》0:表示成功。 《2》1-255:表示不成功。 |
| 2 | $$ | 表示当前进程的进程号 |
| 3 | !** | 显示运行在后台的最后一个作业的PID | | 4 | **_ | 在此之前执行的命令或脚本的最后一个参数 |
| |||
| IFS变量 |||
| shell脚本中的【IFS】(Internal Field Seprator)内部字段分隔符,默认值是【空白】(包含:空格、tab和新行) |||
| bash #直接输出IFS是看不到的,需要将它转化为八进制【040】表示空格,【011】表示tab,【012】表示换行符"\n" echo $IFS echo "$IFS"|od -b \*】与【@】的区别: 《1》【\*】会根据IFS的不同来组合值,而【@】则会将值用" "来组合值。 《2》推荐使用【@】而不是【*】。 |||
[内部参数变量]

bash 复制代码
#内部参数变量示例

#1-创建内部参数变量的示例脚本
vi posparametertest.sh

#【posparametertest.sh】脚本的完整内容
#!/bin/bash
#Auth:coffeemilk
#SciptName:posparametertest.sh
#Desc:

echo "【$USER】你好,如下是测试【位置参数变量】的内容:"
echo "脚本名称是:$0"
echo "脚本的第一个参数是:$1"
echo "脚本的第二个参数是:$2"
echo "脚本的第十个参数是:${10}"
echo "你输入的所有参数是:$@"
echo "你输入的所有参数是:"$*""
echo "你输入参数的总个数:$#"
echo "这个脚本的进程ID是:$$"
echo "这个脚本的执行结果:$?"


#2-执行脚本【posparametertest.sh】
bash posparametertest.sh aa bb cc "coffee milk " dd ee ff gg hh   iii   jjjkkk  

1.5、返回与退出状态

|--------|----------|-------------------------------------------------------------------------------------------------|
| 序号 | 符号 | 说明 |
| 1 | **?** | **用于返回上一条语句或脚本执行的状态**: 《1》0:表示成功; 《2》1:通用错误; 《3》126:命令或脚本没有执行权限; 《4》127:命令没有找到; 《5》1-255:表示不成功。 | | 2 | **exit** | **用于退出脚本或当前shell。** | | 2 | **exit** | ```bash #exit命令的语法 exit n ``` 《1》【n】是一个从0到255的整数。 《2》【0】表示成功退出,非零表示遇到某种失败。 《3》返回值被保存在状态变量【?】中。 |
[返回与退出状态]

1.6、命令的替换

bash 复制代码
#命令的替换有如下两种方式:
#替换方法一【`需执行的命令`】
echo `netstat -antlp`

#替换方法二【$(需执行的命令)】
echo $(netstat -antlp)

二、让变量获取键盘输入的内容

bash 复制代码
#让变量获取键盘输入的内容语法【read  [-p  "信息"]  [var1 var2 ...]】
#若省略变量名,则将输入的内容存入REPLY变量

#1-直接让变量获取键盘输入的内容
read myname

#2-让变量获取键盘输入的内容,且让输入的内容有提示:
read -p "请输入一个0-9的数字:" num

#3-直接获取键盘输入的内容
read

#4-直接获取键盘输入的内容,且让输入的内容有提示
read -p "请输入一个描述:"

#5-直接让变量获取键盘输入的多个值
read name work
read -p"请输入你的姓名 年龄 性别:" name age sex

三、使用declare声明变量

bash 复制代码
#使用shell内置的命令declare声明变量
#1-declare声明变量的语法【declare [选项] variable=value】

|--------|---------------|-----------------------------|
| shell中的内置命令【declare】声明变量的语法【declare [选项] variable=value】 |||
| 序号 | declare选项 | 说明 |
| 1 | -r | 将变量设置为只读(readonly) |
| 2 | -x | 将变量输出到子shell中(export 为全局变量) |
| 3 | -i | 将变量设置为整型(integer) |
| 4 | -a | 将变量设置为一个数组(array) |
| 5 | -f | 列出函数的名字和定义(function) |
| 6 | -F | 只列出函数名称 |
[shell中的内置命令declare声明变量]

bash 复制代码
#declare的使用示例
#1-声明只读变量并赋值
declare -r desc="这是一个只读内容测试"
declare desc="只读"


#2-将变量输出到shell中
env | grep "DB_HOST"
declare -x DB_HOST="127.0.0.1"
env | grep "DB_HOST"
#2.1-取消输出到shell中的变量
declare +x DB_HOST
env | grep "DB_HOST"


#3-将变量设置为整型
declare -i age=29

#4-将变量设置为一个数组
declare -a friuts=("苹果" "香蕉" "橙子" "草莓" "猕猴桃")
#4.1-输出数组的所有内容
echo ${friuts[@]}
#4.2-获取数组中的单个值
echo "${friuts[0]}_${friuts[1]}_${friuts[2]}_${friuts[3]}"
相关推荐
Yana.nice1 小时前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月1 小时前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
小白跃升坊1 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey2 小时前
【Linux】线程同步与互斥
linux·笔记
舰长1152 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
zmjjdank1ng2 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.2 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
VekiSon2 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
zl_dfq3 小时前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
Ankie Wan3 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc