Linux入门(十六)shell&shell变量&设置环境变量&位置参数变量&预定义变量

shell简介

shell是一种命令行解释器,为用户提供与操作系统内核交互的界面。它接收用户输入的命令,解释并执行它们,然后返回结果。Shell 既可以是命令行界面(CLI),也可以是图形用户界面(GUI)

脚本格式要求

1、以#!/bin/bash 开头

2、脚本需要执行权限

创建一个shell脚本

bash 复制代码
cd root
mkdir test_shell_code
cd test_shell_code
vi hello.sh
#!/bin/bash
echo "hello world"

执行脚本

bash 复制代码
#绝对路径
/root/test_shell_code/hello.sh
#相对路径
./hello.sh

有两种方式

1、给所有者执行权限

bash 复制代码
chmod u+x hello.sh
./hello.sh

2、用sh +文件名运行

bash 复制代码
 #移除所有者的执行权限
 chmod u-x hello.sh
 sh hello.sh

shell 变量分为:系统变量、用户自定义变量

系统变量:HOME PATH $USER

$USER 当前登录的用户名

$PATH 可执行文件的搜索路径(用冒号分隔)

$PWD 当前工作目录

$OLDPWD 上一次的工作目录

$SHELL 当前使用的 Shell 程序路径

$UID 当前用户的 UID

$HOSTNAME 系统的主机名

$LANG 当前语言和字符编码设置

$PS1 定义 Shell 提示符的格式

$RANDOM 生成一个随机数(0-32767)

$? 上一条命令的退出状态(0 表示成功,非 0 表示失败)

$$ 当前 Shell 进程的 PID

$! 后台运行最后一个进程的PID

$0 当前脚本或 Shell 的名称

1, 2, ... 脚本的参数($1 是第一个参数, 0 是脚本名) 10 以上的参数需要用 0 是脚本名)10以上的参数需要用 0是脚本名)10以上的参数需要用{10}

$# 脚本的参数个数

\* 或 @ 所有脚本参数( @ 所有脚本参数( @所有脚本参数(\* 合并为一个字符串,@ 保留各参数独立性)。

shell 变量的规则

1、变量的名称可以由字母、数字、下划线组成 但是不能以数字开头

2、定义变量等号两边不能有空格

3、变量的名称一般习惯大写

bash 复制代码
cd /root/test_shell_code
vi var.sh
#!/bin/bash
#定义变量A
A=100
#输出变量需要加$
echo "A=$A"
echo A = $A
#撤销变量A
unset A
echo A=$A
#设置只读常量 不能被unset
readonly B=100
echo B=$B
unset B
C=`date`
echo C=$C
D=$(date)
echo D=$D

设置环境变量

级别语法

export 变量名=变量值

source 配置文件

echo $变量名

bash 复制代码
#查看tomcat 的安装位置
ps -aux | grep tomcat
vi /etc/profile
export TOMCAT_HOME
TOMCAT_HOME='/usr/share/tomcat'

#修改文件之后一定要重新生效
source /etc/profile

#使用TOMCAT_HOME变量 同样也可以在sh文件里使用
echo $TOMCAT_HOME

shell脚本的多行注释

:<<!

注释内容

!

位置参数变量

$0 当前脚本或 Shell 的名称

1, 2, ... 脚本的参数($1 是第一个参数, 0 是脚本名) 10 以上的参数需要用 0 是脚本名)10以上的参数需要用 0是脚本名)10以上的参数需要用{10}

$# 脚本的参数个数

\* 或 @ 所有脚本参数( @ 所有脚本参数( @所有脚本参数(\* 合并为一个字符串,@ 保留各参数独立性)。

bash 复制代码
vi my_shell.sh
#/bin/bash
echo $0 $1 $2
echo $#
echo $@
echo $*

预定义变量

$$ 当前 Shell 进程的 PID

$! 后台运行最后一个进程的PID

$0 当前脚本或 Shell 的名称

1, 2, ... 脚本的参数($1 是第一个参数, 0 是脚本名) 10 以上的参数需要用 0 是脚本名)10以上的参数需要用 0是脚本名)10以上的参数需要用{10}

$# 脚本的参数个数

\* 或 @ 所有脚本参数( @ 所有脚本参数( @所有脚本参数(\* 合并为一个字符串,@ 保留各参数独立性)。

#!/bin/bash

echo "当前进程ID:$KaTeX parse error: Expected 'EOF', got '#' at position 3: " #̲用后台方式运行一个脚本 并获取...!"

echo "执行的结果是:$?"

相关推荐
小白的码BUG之路5 小时前
linux -- ssh两台机器相连
运维·服务器·ssh
Frag0ut5 小时前
Chrome 2026 AI 能力全解析:从 Auto Browse 到 Skills,浏览器正在变成智能代理
chrome·ai·谷歌浏览器·gemini·智能代理·skills·auto browse
缓慢更新6 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
续写烂尾7 小时前
贴片 SD NAND、eMMC、TF 卡规格怎么定?硬件工程师选型清单
运维·服务器·网络
不昀7 小时前
网口Link Up后仍然掉线,怎样区分物理链路和数据通路问题?
linux·以太网
迪康妍妍7 小时前
终端管控实操:封堵网盘与IM外发通道的落地思路
运维·网络·安全·架构·安全性测试
sxgzzn7 小时前
如何选择合适的开关柜在线监测工具?
运维·重构·无人机·开关柜局放在线监测·光伏运维管理系统
Lhan.zzZ7 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
zxcvb1538 小时前
运维经验分享:监控网页更新内容的几种思路
运维
Fcy6488 小时前
Linux下 多路转接select详解
linux·select·多路转接