shell 中的变量

shell 中的变量

学习目标
变量的定义
在 shell 脚本中如何定义变量
变量的转译
linux 系统中命令别名的设定
用户环境变量的设定
利用命令执行结果设定变量
脚本函数

变量的定义
变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息
在 shell 中变量是不能永久保存在系统中的,必须在文件中声明

在 shell 脚本中变量的种类
在 shell 中变量分为环境级变量,用户级变量,系统级变量
环境级变量只在当前 shell 中生效, shell 关闭变量丢失
用户级变量写在用户的骨文件中,只针对当前用户生效
系统级变量被写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效

shell 脚本中变量的定义方法
环境级
export A=1
用户级
vim /.bash_profile
export A=1
系统级
vim /etc/profile
export A=1

环境级变量
在这里插入图片描述

用户级变量
在这里插入图片描述
在这里插入图片描述
用户级变量在切换用户和环境时失效su -student -代表同时切换环境
在这里插入图片描述
系统级变量
在这里插入图片描述
在这里插入图片描述
在读取变量的时候后读取的会覆盖前面的级,默认顺序是系统级最后读取,但是变量修改过后哪个级修改过哪个级就是最后读取,source 文件刷新相应修改过变量的级
在这里插入图片描述
添加PATH 可以直接以文件名字运行脚本
比如脚本放在了/mnt里可是现在所处/etc,添加一个PATH,系统就可以自己找到
添加一个用户级PATH
在这里插入图片描述
查看
在这里插入图片描述
变量名称的规范
变量名称中通常包含大小写字字母,数字,下划线(不是必须)
变量名称格式
WESTOS_LINUX
Westos_Linux
westoS_Linux
不能数字开头,只能加_
""不能引用`` 、 ! $

字符的转译及变量的声明
\
转译单个字符
“”
弱引用,批量转译 “” 中出现的字符,
‘’
强引用,批量转译 ‘’ 中出现的字符
‘’ 与 “” 两者的区别在于, “” 不能转译 “”,"`","!","$"
${}
变量声明
例如:
A=1
echo $Ab
echo ${A}b

变量值传递
$1 脚本后的第一串字符串
$2 脚本后的第二串字符串
$3 脚本后的第三串字符串
$# 脚本后所跟字符串的个数
$* 脚本后跟的所有字符串,模式为“ 1 2 3 ”
$@ 脚本后跟的所有字符串,模式为“ 1”“2”“3”
$ $ 当前运行程序id

测试
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述对比$*和 $@
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
用 read 实现变量传递
交互
read WESTOS
read -s WESTOS
read -p "input: " WESTOS

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-s是将输入隐藏
在这里插入图片描述
在这里插入图片描述
实验脚本
输入ip查看是否可以连接
使用read
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

linux 系统中命令别名的设定
alias xie=‘vim’
vim ~/.bashrc
alias xie=‘vim’
vim /etc/bashrc
alias xie=‘vim’
unalias xie
相关操作
环境级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用户级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
系统级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
shell级只针对当前shell
在这里插入图片描述
在这里插入图片描述
别名的删除
首先删除各文件的写入
在这里插入图片描述
查看
在这里插入图片描述
unalias 别名 彻底清除
在这里插入图片描述
查看
在这里插入图片描述
利用命令执行结果设定变量
Hostname=$(hostname)
Hostname=`hostname后面也有点不过由于csdn问题无法正常显示
``通用
$只在shell
$?
$? 是命令在执行完成之后产生的退出值
范围是 [0-255]
当 $0=0 时标示命令执行没有错误输出
这个值可以用 exit 命令执行 .
例如 exit 66
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本中的函数
脚本中的函数时把一个复杂的语句块定义成一个字符串的方法
函数脚本里的脚本
循环执行
脚本 输入exit或者EXIT退出
在这里插入图片描述
在这里插入图片描述
实验脚本
输入相应的字母进行相应的操作
用户的创建或者删除
第一部分
在这里插入图片描述
第二部分
在这里插入图片描述
第三部分
在这里插入图片描述
测试
在这里插入图片描述

<think>好的,用户想知道如何在Shell脚本中正确调用和使用变量。首先,我需要回忆Shell变量的基本知识。根据引用[2],Bash中没有布尔类型,但可以用0和1来模拟。这可能是一个需要注意的点。 首先,变量声明。在Shell中,变量赋值不需要任何符号,直接等号,比如name="value"。但要注意等号两边不能有空格,否则会报错。这点需要强调,因为容易出错。 然后,调用变量的时候需要用$符号或者${}。比如$var或者${var}。后者在变量名后有其他字符时特别有用,可以避免歧义。比如${var}abc,这样就能正确解析变量名。引用[4]中的例子也用了$IP和$PORT,说明直接使用$变量名是常见做法。 接下来是变量的作用域。默认情况下,变量是局部的,只在当前Shell中有效。如果想在子Shell中使用,需要用export导出为环境变量。引用[1]提到,如果被调用的脚本在当前Shell执行,变量可以被主脚本获取,所以需要确认用户是否需要跨脚本使用变量。 另外,用户可能对字符串中的变量替换有疑问。比如如何在双引号和单引号中使用变量。双引号内变量会被替换,而单引号不会。例如echo "Hello $name"会替换变量,而echo 'Hello $name'则不会。引用[4]的例子中使用了单引号和双引号混合的情况,可能需要特别注意引号的嵌套。 还有,特殊变量如$0、$1、$#等,这些是Shell脚本中的位置参数和特殊变量,用户可能需要了解这些的使用方法。比如$1表示第一个参数,$#表示参数个数。 此外,变量的默认值和错误处理。比如${var:-default}表示如果var未设置或为空,使用默认值。这在脚本中处理未定义的变量时很有用,避免脚本出错。 最后,引用[3]提到了Shell的配置文件,如~/.profile,这些文件中的变量是在登录时加载的,可能影响脚本的环境变量。用户如果在脚本中遇到变量未定义的问题,可能需要检查环境变量的来源。 总结下来,用户的问题需要涵盖变量的声明、调用、作用域、引号使用、特殊变量、默认值设置以及环境变量配置等方面。需要结构清晰,逐步解释每个部分,并给出示例代码帮助理解。</think>### 如何在 Shell 脚本中调用和使用变量 #### 1. **变量声明与赋值** 在 Shell 脚本中,变量声明无需指定类型,直接通过等号赋值,且等号两侧不能有空格。例如: ```bash name="Alice" # 字符串变量 count=10 # 整型变量 failed=0 # 模拟布尔变量:0 表示 False,1 表示 True[^2] ``` #### 2. **变量调用** - **直接调用**:使用 `$` 符号引用变量: ```bash echo $name # 输出 Alice ``` - **明确作用域**:若变量名后紧跟其他字符,需用 `${}` 包裹变量名以避免歧义: ```bash echo "Value: ${count}th" # 输出 Value: 10th ``` #### 3. **变量作用域** - **局部变量**:默认仅在当前 Shell 中有效。 - **环境变量**:使用 `export` 声明后可在子进程中访问: ```bash export PATH="/usr/local/bin:$PATH" # 修改环境变量 ``` #### 4. **字符串中的变量调用** - **双引号内解析变量**:双引号允许变量替换,单引号则保持原样: ```bash echo "Hello $name" # 输出 Hello Alice echo 'Hello $name' # 输出 Hello $name ``` - **复杂场景示例**(如引用[4]的代码片段): ```bash IP="192.168.1.1" PORT=8080 php -r '$sock=fsockopen("'$IP'",'$PORT');' # 变量嵌入字符串中 ``` #### 5. **特殊变量** - **位置参数**:`$0`(脚本名)、`$1`(第一个参数)、`$#`(参数个数)等。 - **返回值**:`$?` 表示上一条命令的退出状态。 #### 6. **默认值与错误处理** - **设置默认值**:`${var:-default}` 表示若 `var` 未定义或为空,则使用 `default`: ```bash echo ${name:-"Unknown"} # 若 name 未定义,输出 Unknown ``` #### 7. **配置文件中的变量** - **全局配置**:如 `/etc/profile` 或用户级 `~/.profile`,这些文件在登录时加载[^3]。 - **脚本内生效**:若需跨脚本共享变量,需通过 `source` 命令加载配置文件: ```bash source ~/.profile # 使配置文件中变量在当前 Shell 生效 ``` --- ### 示例代码 ```bash #!/bin/bash # 声明变量 user="Bob" retries=3 # 调用变量 echo "User: $user, Retries left: ${retries}" # 修改布尔变量 failed=1 if [[ $failed -eq 1 ]]; then echo "Error occurred!" >&2 fi # 使用环境变量 export LOG_DIR="/var/log" echo "Logs saved to $LOG_DIR" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值