shell 编程中内置的变量(冷门又好用)

简介

    分别盘点一下 shell 中的内置变量,真的巨好用!!!包括:环境变量类、shell 变量类、终端设置类和其他一些变量。

        

常用的内置变量目录如下

1. 环境变量类

$MACHTYPE:机器类型

$OSTYPE:操作系统类型

$HOSTNAME:当前主机名

$HOME:当前用户家目录

$USER:当前用户名

$SHELL:当前shell的路径

2. shell 变量类

$PWD:当前目录

$OLDPWD:上一个工作目录

$?:上一个命令的状态码

$0:当前 shell 脚本名称

$$:当前 shell 脚本 PID

$PPID:当前 shell 脚本的父ID

$IFS:字段分隔符

3. 终端类

$TERM:终端的类型

$PS1:设置终端提示符

$PS2:设置终端多行提示符

$COLUMNS:终端的宽度

$LINES:终端的高度

4. 其他变量

$RANDOM:随机数

$SECONDS:shell 脚本启动的秒数


        

1. 环境变量类

$MACHTYPE:机器类型

echo $MACHTYPE

        

$OSTYPE:操作系统类型

echo $OSTYPE

        

$HOSTNAME:当前主机名

echo $HOSTNAME

        

$HOME:当前用户家目录

  • $HOME 表示当前用户的家目录
echo $HOME

当使用 su 命令切换到另一个用户,也能够识别当前用户的家目录

        

$USER:当前用户名

  • $USER 表示当前用户的名称
echo $USER

当使用 su 命令切换到另一个用户,也能够识别当前用户名

        

$SHELL:当前shell的路径

  • 这个 shell 的路径是指系统 shell 的路径
echo $SHELL


        

2. shell 变量类

$PWD:当前目录

  • $PWD 表示当前终端的路径,不是脚本的路径
echo $PWD

如果需要获取脚本的路径,可以这样写

path=$(dirname `realpath ${BASH_SOURCE}`)

        

$OLDPWD:上一个工作目录

  • $OLDPWD 用来获取上一个工作 目录

      

$?:上一个命令的状态码

状态码的范围是 0~255

0: 表示命令成功执行。
1-125: 表示命令执行失败或出现错误。
126: 表示命令不可执行。可能是因为权限不足或命令无法找到等原因。
127: 表示命令未找到。通常是因为找不到执行的命令或脚本。
128+: 表示命令因为收到了一个信号而退出。
130: 表示命令因为收到了 SIGINT 信号而中断。类似于键盘上按下 Ctrl+C 中断命令的情况。
137: 表示命令因为收到了 SIGKILL 信号而被终止。
255: 表示状态码超出了范围。

        

$0:当前 shell 脚本名称

echo $0

        

$$:当前 shell 脚本 PID

echo $$

          

$PPID:当前 shell 脚本的父ID

echo $PPID

我们来查询一下脚本自己的 PID 和父 ID

echo "父ID: $PPID, 自己PID: $$"
ps -ef |grep $PPID |grep -v grep

        

$IFS:字段分隔符

设置字段分隔符

IFS=' '    # 设置分隔符为空格
IFS=','    # 设置分隔符为逗号
IFS=':'    # 设置分隔符为冒号
IFS='\t'   # 设置分隔符为制表符
IFS='\n'   # 设置分隔符为换行
IFS='abc'  # 设置分隔符为字符串
IFS=' ;\t' # 设置多个分隔符

        

比如 for 循环一个字符变量

str="AAA  BBB,CCC"
IFS=','
for i in ${str};do echo ${i} ;done

        

3. 终端类

$TERM:终端的类型

  • 用于指定当前终端所使用的终端类型

        

$PS1:设置终端提示符

  • $PS1 用于定义命令提示符格式,可以通过修改环境变量的值来自定义。

比如我当前的提示是这样的

【用户名】【主机名】【目录名】

查看一下当前的设置

        

我们来自定义设置一下

【案例一】显示用户名、主机名和工作目录

export PS1="\u@\h:\w$ "

        

【案例二】只显示工作目录

export PS1="\w$ "

        

【案例三】自定义提示符颜色

export PS1="\[\033[01;32m\]\u@\h:\w\[\033[00m\]$ "

        

详细的转译序号说明如下

# 用户名和主机信息
\u:当前用户名
\h:短主机名
\H:完整主机名(包括域名)
\@:12小时制的时间(格式:HH:MM am/pm)
\A:24小时制的时间(格式:HH:MM)
# 工作目录信息
\w:完整工作目录路径
\W:当前工作目录的基名
\d:当前日期(格式:Weekday Month Day)
# 控制文本颜色:
\033[0m:重置所有文本属性,包括颜色。
\033[30m 到 \033[37m:设置文本前景色(即文本的颜色),范围从黑色到白色。
\033[40m 到 \033[47m:设置文本背景色,范围从黑色到白色。# 控制文本样式:
\033[1m:设置粗体样式。
\033[4m:设置下划线样式。
\033[7m:设置反色样式(即文本背景色与前景色交换)。# 控制光标位置:
\033[A:将光标上移一行。
\033[B:将光标下移一行。
\033[C:将光标向右移动一格。
\033[D:将光标向左移动一格。

        

$PS2:设置终端多行提示符

先看一下默认的多行提示符

        

设置多行提示符

export PS2=">>> "

        

$COLUMNS:终端的宽度

echo $SECONDS

手动调整终端宽度也会使变量发生变化

        

通过获取终端宽度 ,可以根据情况输出满屏的字符。

perl -E "say '=' x ${COLUMNS}"

        

$LINES:终端的高度

echo ${LINES}

根据当前高度获取

        

通过获取终端高度,输出满屏的符号

for ((i=1; i<=LINES; i++));do perl -E "say '-' x ${COLUMNS}" ;done

        

4. 其他变量

$RANDOM:随机数

  • 0~32767 之间到随机数

        

如果想控制随机数在 0~100,试试取余的方法

echo $((RANDOM % 100))

        

$SECONDS:shell 脚本启动的秒数

sleep 3
echo $SECONDS

        

如果直接在终端输出,则显示终端启动的秒数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/300665.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase深度历险 | 京东物流技术团队

简介 HBase 的全称是 Hadoop Database&#xff0c;是一个分布式的&#xff0c;可扩展&#xff0c;面向列簇的数据库&#xff0c;是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。本文会像剥洋葱一样&#xff0c;层层剥开她的心。 特点 首先我…

Jenkins Tutorial

什么是Jenkins Jenkins是一个自动化平台&#xff0c;它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先&#xff0c;你拥有一个Master Server&#xff0c;它控制pipelines和安排Build到你的Agent上&#xff1b; 其次&…

【超详细前后端项目搭建】前端vue3+ts项目(引入ElementPlus、Axios)、后端springboot搭建(创建接口操作mysql数据库)实现前后端联调

目录 前言一、前端项目1、使用vue脚手架创建项目1.1检查vue版本1.2 使用vue脚手架创建项目 2、删除项目多余文件&#xff0c;修改配置项目2.1、删除以下文件2.1、在views下创建index文件2.2、修改router/index.ts路由文件&#xff1a;2.3、修改App.vue文件&#xff1a;2.4、初始…

MySQL递归公用表表达式

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;专栏系列&#xff1a;MySQL知识 &…

基本的逻辑门

前言 本篇文章介绍基本的逻辑门&#xff0c;然后给出C语言描述 逻辑门是在集成电路上的基本组件。简单的逻辑门可由晶体管组成。这些晶体管的组合可以使代表两种信号的高低电平在通过它们之后产生高电平或者低电平的信号。高、低电平可以分别代表逻辑上的“真”与“假”或二进…

PHP-8.1.0-dev 后门命令执行漏洞复现_zerodiumvar_dump

0x00漏洞描述 PHP 8.1.0-dev 版本在2021年3月28日被植入后门&#xff0c;但是后门很快被发现并清除。当服务器存在该后门时&#xff0c;攻击者可以通过发送User-Agentt头来执行任意代码。 0x01影响范围 PHP 8.1.0-dev 0x02环境搭建 1、本次环境搭建使用vulhub中的docker环…

【开源】基于Vue+SpringBoot的新能源电池回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 ​编辑 1.windeployqt简介 2.打包具体过程 1&#xff09;用vscode编译&#xff0c;生成Release文件夹&#xff08;也有Debug文件夹&#xff0c;但是发布版本一般都是用Release&#xff09; 2&#xff09;此时可以看下Release文件夹内&#xff0c;一般是.…

【Vue2+3入门到实战】(4)Vue基础之指令修饰符 、v-bind对样式增强的操作、v-model应用于其他表单元素 详细示例

目录 一、今日学习目标1.指令补充 二、指令修饰符1.什么是指令修饰符&#xff1f;2.按键修饰符3.v-model修饰符4.事件修饰符 三、v-bind对样式控制的增强-操作class1.语法&#xff1a;2.对象语法3.数组语法4.代码练习 四、京东秒杀-tab栏切换导航高亮1.需求&#xff1a;2.准备代…

基于MPU6050的跌倒检测项目设计

一、背景 随着人口老龄化的不断加剧&#xff0c;老年人的健康和安全问题备受关注。本设计旨在利用STM32单片机与MPU6050传感器相结合&#xff0c;实现基于角度变化的跌倒检测系统。这一系统不仅能够快速、准确地检测老年人是否发生跌倒&#xff0c;还通过整合通信模块实现了实…

怎么搭建实时渲染云传输服务器

实时渲染云传输技术方案&#xff0c;在数字孪生、虚拟仿真领域使用越来越多&#xff0c;可能很多想使用该技术方案项目还不知道具体该怎么搭建云传输服务器&#xff0c;具体怎么使用实时云渲染平台系统。点量云小芹将对这两个问题做集中分享。 一、实时渲染服务器怎么搭建&…

blender scripting 编写

blender scripting 编写 一、查看ui按钮对应的代码二、查看或修改对象名称三、案例&#xff1a;渲染多张图片并导出对应的相机参数 一、查看ui按钮对应的代码 二、查看或修改对象名称 三、案例&#xff1a;渲染多张图片并导出对应的相机参数 注&#xff1a;通过ui交互都设置好…