实例分析 centos8 shell 命令与变量

简介: centos 8 shell 类型; shell 变量; 变量定义与修改; 全局变量与局部变量

shell 与 环境变量

1. 查看系统可用的shell 类型 :
[arthur@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
/usr/bin/zsh
/bin/zsh
2. 查看用户登陆时获得的shell类型:
[arthur@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...
rngd:x:973:973:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin

[arthur@localhost ~]$ cat /etc/passwd | grep arthur
arthur:x:1000:1000:arthur:/home/arthur:/bin/bash
3. shell 的变量功能:
3.1 可以使用echo来显示变量内容:
[arthur@localhost ~]$ echo $PATH
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${HOME}
/home/arthur
3.2 设置和修改变量内容:

可对变量赋值、修改、增添、取消

[arthur@localhost ~]$ vname1="This's is variable 1"
[arthur@localhost ~]$ echo $vname1
This's is variable 1
#单引号识别错误
[arthur@localhost ~]$ vname2='This\'s\ is\ variable\ 2' | echo $vname2
> ^C
#单引号识别错误
[arthur@localhost ~]$ vname2='This\'s\ is\ variable\ 2' 
> ^C
[arthur@localhost ~]$ vname2=This\'s\ is\ variable\ 2
[arthur@localhost ~]$ echo $vname2
This's is variable 2
[arthur@localhost ~]$ echo $vname1 $vname2
This's is variable 1 This's is variable 2
#修改变量
[arthur@localhost ~]$ vname=variable 
[arthur@localhost ~]$ echo $vname
variable
[arthur@localhost ~]$ vname=variables 
[arthur@localhost ~]$ echo $vname
variables
#取消变量
[arthur@localhost ~]$ unset vname1 vname2
[arthur@localhost ~]$ echo $vname1 $vname2

变量内容删除、取代与替换:

[arthur@localhost ~]$ echo $PATH
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#变量path 定义
[arthur@localhost ~]$ path=${PATH}  
[arthur@localhost ~]$ echo $path
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#######################################################################
#######################################################################
**删除**
##将首个含  /local/bin  的路径移除,`#`代表从变量内容的最前面开始向右删除,且仅删除最短的那个; `/`代表要被删除的部分,`#`代表由最前面开始向右删除,所以这里由`/`开始写起;  
[arthur@localhost ~]$ echo ${path#/*local/bin:}
/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo $PATH
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#可以发现,上述删除操作并未改变变量`path`内容
[arthur@localhost ~]$ echo $path
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#######################################################################
##删除前面所有目录,仅保留最后一个目录.   一个`#`代表仅删除最短的目录,两个`#`代表删除最长的目录
[arthur@localhost ~]$ echo ${path#/*:}
/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${path}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${path##/*:}
/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo $path
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${path#home*}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin:home/arthur/bin
[arthur@localhost ~]$ echo ${path}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin:home/arthur/bin


#########################################################################
#从后往前删除变量名称 `%`

[arthur@localhost ~]$ echo $path
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#删除最后一个目录,从`:` 到`bin`为止
[arthur@localhost ~]$ echo ${path%:*bin}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
#只保留第一个目录, `%%` 代表最长的符合字串
[arthur@localhost ~]$ echo $path
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${path%%:*bin}
/home/arthur/.local/bin
#########################################################################
#########################################################################
**取代**
#将 `path` 变量内容 `sbin` 取代成大写 `SBIN`
[arthur@localhost ~]$ echo ${path}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#两条斜线中间的为旧字符串
[arthur@localhost ~]$ echo ${path/sbin/SBIN}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/SBIN:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${path}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#仅一条斜线时,仅首个变量内容会发生取代
[arthur@localhost ~]$ echo ${path/bin/BIN}
/home/arthur/.local/BIN:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
#两条斜线,所有匹配的内容都会发生取代
[arthur@localhost ~]$ echo ${path}
/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin
[arthur@localhost ~]$ echo ${path//bin/BIN}
/home/arthur/.local/BIN:/home/arthur/BIN:/home/arthur/.local/BIN:/home/arthur/BIN:/usr/local/BIN:/usr/local/sBIN:/usr/BIN:/usr/sBIN:/var/lib/snapd/snap/BIN
3.3 环境变量

查看当前shell环境下的环境变量: env 或者export

[arthur@localhost ~]$ env
LANG=en_US.UTF-8
...
USER=arthur
PWD=/home/arthur
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HOME=/home/arthur
LOGNAME=arthur
PATH=/home/arthur/.local/bin:/home/arthur/bin:/home/arthur/.local/bin:/home/arthur/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin

自定义变量转为环境变量:export

#export 变量
export PATH=${PATH}:/dir/to/des/bin
3.4 变量的有效范围

环境变量等价于全局变量(global variable); 自定义变量等价于局部变量(local variable)

目录
相关文章
|
12天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
83 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
17天前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
42 12
|
2月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
233 7
|
2月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
75 1
|
3月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
94 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
安全 Linux 网络安全
centos7中firewall防火墙的常用命令总结
以上命令集覆盖了 `firewalld`的基本操作,是维护CentOS 7系统安全不可或缺的工具。对于更高级的配置需求或遇到特定问题
56 3
|
3月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
31 1
|
3月前
|
Linux 编译器 C语言
./build.sh:行1: g++: 未找到命令的错误问题在centos操作系统下面如何解决
通过上述步骤,您应该能够有效地解决CentOS系统中 `g++: 未找到命令`的错误。确保软件开发环境配置得当,对于顺利执行编译脚本和日常开发工作至关重要。如果问题依然存在,考虑检查脚本内的命令路径引用是否正确,或进一步排查系统配置问题。
190 0
|
3月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
29 0
|
Ubuntu JavaScript Linux
centos7.4常用命令
centos7.4常用命令
224 0