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.mzph.cn/news/578016.shtml

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

相关文章

JVM初识-----01章

一.虚拟机与java虚拟机的区别以及共同点 1.虚拟机&#xff08;Virtual Machine&#xff0c;简称VM&#xff09; 是一种能够在物理计算机上模拟一台完整的计算机系统的软件。它运行在宿主操作系统之上&#xff0c;可以提供一个独立的运行环境&#xff0c;使得在不同的操作系统上…

【深度学习-目标检测】03 - Faster R-CNN 论文学习与总结

论文地址&#xff1a;Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks 论文学习 1. 摘要与引言 研究背景与挑战&#xff1a;当前最先进的目标检测网络依赖于 区域提议&#xff08;Region Proposals&#xff09;来假设目标的位置&#xff0c…

CentOS系统环境搭建(二十六)——使用nginx在无域名情况下使用免费证书设置https

centos系统环境搭建专栏&#x1f517;点击跳转 文章目录 使用nginx在无域名情况下使用免费证书设置https1.获取SSL证书1.1 生成SSL密钥1.2 生成SSL证书1.3 重命名密钥文件 2.nginx配置https2.1 放证书2.2 修改nginx.conf文件2.2.1 将80端口重定向到4432.2.2 端口443配置ssl证书…

Upload-Labs-Linux

题目 1.打开靶机 随便上传一个图片&#xff0c;查看get请求发现/upload/XXX.jpg 2.创建一个脚本文件 命名为flag.php.jpg,并上传 脚本文件内容&#xff1a; <?php eval($_POST[1234])?> 3上传后复制文件get请求的链接并打开蚁剑 连接密码为123 双击链接 4&#xff…

我在 VSCode 插件里接入了 ChatGPT,解决了Bug无法定位的难题

作为一名软件开发者&#xff0c;我时常面临着代码中Bug的定位和解决问题。这个过程往往既费时又充满挑战。然而&#xff0c;最近我在我的VSCode插件中接入了ChatGPT&#xff0c;这个决定彻底改变了我处理Bug的方式。 Bug&#xff1a;开发者的噩梦 在开发过程中&#xff0c;遇…

leetcode 6. N 字形变换(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public String convert(String s, int numRows) {if(numRows 1) {return s;}int lengths.length();StringBuilder retnew StringBuilder();//获取…

Flink电商实时数仓(六)

交易域支付成功事务事实表 从topic_db业务数据中筛选支付成功的数据从dwd_trade_order_detail主题中读取订单事实数据、LookUp字典表关联三张表形成支付成功宽表写入 Kafka 支付成功主题 执行步骤 设置ttl&#xff0c;通过Interval join实现左右流的状态管理获取下单明细数据…

zookeeper基本使用

目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…

C++中的存储类及其实例

文章目录 0. 语法1. 自动存储类自动存储类对象的属性自动存储类的例子 2. 外部存储类extern存储类对象的属性extern存储类的例子 3. 静态存储类静态存储类的属性静态存储类的例子 4. 寄存器存储类寄存器存储类对象的属性寄存器存储类例子 5. 可变&#xff08;mutable&#xff0…

【机器学习】Boosting算法-梯度提升算法(Gradient Boosting)

一、原理 梯度提升算法是一种集成学习方法&#xff0c;它可以将多个弱分类器或回归器组合成一个强分类器或回归器&#xff0c;提高预测性能。梯度提升算法的核心思想是利用损失函数的负梯度作为残差的近似值&#xff0c;然后用一个基学习器拟合这个残差&#xff0c;再将其加到之…

二维码智慧门牌管理系统:提升社区管理智能化水平

文章目录 前言一、全方位信息录入与查询二、公安权限账户访问的公安大数据后台三、社区工作人员申请权限安装录入软件四、业主通过移动终端扫描标准地址二维码门牌自主申报录入五、系统的价值 前言 在数字化时代&#xff0c;社区管理面临着更新流动人口信息、准确录入六实相关…

docker安装入门及redis,minio,rabbitmq应用安装

部分笔记来自黑马课堂&#xff1a;【黑马程序员Docker快速入门到项目部署&#xff0c;MySQL部署Nginx部署docker自定义镜像DockerCompose项目实战一套搞定-哔哩哔哩】 https://b23.tv/niWEhEF 一、什么是docker&#xff1a; 快速构建、运行、管理应用的工具。--帮助我们快速部…

【中小型企业网络实战案例 二】配置网络互连互通

​【中小型企业网络实战案例 一】规划、需求和基本配置-CSDN博客 热门IT技术视频教程&#xff1a;https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 配置接入层交换机 1.以接入交换机ACC1为例&#xff0c;创建ACC1的业务VLAN 10和20。 <…

nginx反向代理服务器及负载均衡服务配置

一、正向代理与反向代理 正向代理&#xff1a;是一个位于客户端和原始服务器(oricin server)之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标(原始服务器)&#xff0c;然后代理向原始服务器转交请求并将获得的内容返回给客户…

南邮最优化期末复习

黄金分割法 单纯形法&#xff08;大M法&#xff09; 求min, σ找最小&#xff0c;终止条件全部大于0 θ找最小&#xff0c;且不能为负数求max, σ找最大&#xff0c;终止条件全部小于0 θ找最小&#xff0c;且不能为负数 例题 二阶段单纯形法想 分支定界法&#xff08;第二章&…

【单调队列】LeetCode1499:满足不等式的最大值

涉及知识点 单调队列 题目 给你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标&#xff0c;并按照横坐标 x 的值从小到大排序。也就是说 points[i] [xi, yi] &#xff0c;并且在 1 < i < j < points.length 的前提下&#xff0c; xi &…

iMazing2024免费版iOS移动设备管理软件

以自己的方式管理iPhone&#xff0c;让备受信赖的软件为您传输和保存音乐、消息、文件和数据。安全备份任何 iPhone、iPad 或 iPod touch。iMazing 功能强大、易于使用&#xff0c;称得上是 Mac 和 PC 上最好的 iOS 设备管理器。 正在为iTunes繁琐的操作发愁&#xff1f;设备数…

leetcode——打家劫舍问题汇总

本章汇总一下leetcode中的打家劫舍问题&#xff0c;使用经典动态规划算法求解。 1、梦开始的地方——打家劫舍&#xff08;★&#xff09; 本题关键点就是不能在相邻房屋偷东西。 采用常规动态规划做法&#xff1a; 根据题意设定dp数组&#xff0c;dp[i]的含义为&#xff1a…

Typora Mac激活

首先去官网选择mac版本下载安装 typora下载 然后打开typora包内容找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist 找到/static/js/Licen..如下图 编辑器打开上面文件夹 输入 hasActivated"true"e.hasActivated 进行搜索 将它改为 hasA…

人工智能:网络犯罪分子的驱动力

随着 2024 年的临近&#xff0c;是时候展望今年的网络安全状况了。由于网络犯罪日益复杂&#xff0c;预计到 2025 年&#xff0c;全球网络安全成本将增至 10.5 万亿美元。 人工智能的使用不断发展&#xff0c;网络犯罪分子变得越来越有创造力 我们注意到&#xff0c;联邦调查…