热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell脚本中变量操作详解

本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。

本文参考自《鸟哥的Linux私房菜》,旨在提供一个关于Shell脚本中变量使用的全面指南。

在Shell脚本编程中,变量是非常重要的组成部分。正确地管理和使用变量可以大大提高脚本的灵活性和功能性。

变量的使用

在Shell中,可以通过简单的命令来输出变量的值:

echo $variable
echo $PATH
echo ${PATH}

变量的赋值规则

1. 变量名和变量值之间通过等号(=)连接,例如:

myname=VBird

2. 等号两边不能有空格,否则会被视为命令的一部分,例如以下都是错误的:

myname = VBird
myname=VBird Tsai

3. 变量名只能包含字母和数字,且不能以数字开头,例如以下为错误示例:

2myname=VBird

4. 如果变量值中包含空格或其他特殊字符,可以使用双引号或单引号包围变量值。双引号内的特殊字符会保持其特殊含义,而单引号内的特殊字符则被视为普通字符。例如:

var="lang is $LANG" # 结果为 "lang is en_US"
var='lang is $LANG' # 结果为 "lang is $LANG"

5. 使用反斜杠(\)可以转义特殊字符,使其变为普通字符,例如:

var=\$special

6. 在命令中使用其他命令的输出结果时,可以使用反引号(`)或 $( ) 结构。例如获取内核版本:

version=$(uname -r)
echo $version # 可能输出 2.6.18-128.el5

7. 若要追加变量值,可以使用 "$变量" 或 ${变量},例如:

PATH="$PATH":/home/bin

8. 使用 export 命令可以使变量成为环境变量,从而在子进程中可用,例如:

export PATH

9. 通常大写字母用于表示系统预定义的变量,用户自定义的变量建议使用小写字母,以便区分。

10. 使用 unset 命令可以删除变量,例如:

unset myname

变量内容的处理

1. 删除变量内容的前缀或后缀:

path=${PATH}
echo ${path#/*kerberos/bin:} # 删除最短匹配前缀
echo ${path##/*:} # 删除最长匹配前缀
echo ${path%:*bin} # 删除最短匹配后缀
echo ${path%%:*bin} # 删除最长匹配后缀

2. 替换变量内容中的字符串:

echo ${path/sbin/SBIN} # 替换第一个匹配项
echo ${path//sbin/SBIN} # 替换所有匹配项

变量的测试与条件赋值

在脚本中,经常需要测试变量是否存在或是否为空,并根据测试结果进行不同的处理。例如:

echo $username # 如果未设置,可能为空
username=${username-root} # 若未设置,则赋值为 root
echo $username

username="vbird tsai"
username=${username-root} # 若已设置,则保持原值
echo $username

username=""
username=${username:-root} # 若为空或未设置,则赋值为 root
echo $username

以下是不同情况下的变量测试与赋值行为:

变量配置方式str 未设置str 为空字符串str 已设置非空字符串
var=${str-expr}var=exprvar=var=$str
var=${str:-expr}var=exprvar=exprvar=$str
var=${str+expr}var=var=exprvar=expr
var=${str:+expr}var=var=var=expr
var=${str=expr}str=expr
var=expr
str 不变
var=
str 不变
var=$str
var=${str:=expr}str=expr
var=expr
str=expr
var=expr
str 不变
var=$str
var=${str?expr}expr 输出至 stderrvar=var=$str
var=${str:?expr}expr 输出至 stderrexpr 输出至 stderrvar=$str

推荐阅读
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
author-avatar
冰凌清泽_712
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有