热门标签 | 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

推荐阅读
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 编写css让div2在div1的右下角? ... [详细]
  • Python notes
    6.1.1.执行模块当你用下面的方式运行一个Python模块pythonfibo.py模块中的代码将会被执行,就像导入它一样,不过此时__name__被设置为__main__。 ... [详细]
  • 本文探讨了过度依赖咖啡对生物钟的影响,以及如何合理划分学习和娱乐时间。通过反思,我们认识到即使是快乐的事情也需要适度,培养兴趣爱好应注重沉浸感和心流体验。文章还提供了一些具体的调整建议。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 本文介绍了如何使用JFreeChart库创建一个美观且功能丰富的环形图。通过设置主题、字体和颜色等属性,可以生成符合特定需求的图表。 ... [详细]
  • 解决Hive操作无响应问题:drop table和create table的处理方法
    本文详细介绍了在Hive中执行drop table和create table命令时遇到无响应的情况,并提供了完整的解决方案。通过调整MySQL字符集编码,确保Hive数据库与MySQL之间的兼容性,从而有效解决问题。 ... [详细]
  • 本文探讨了天才与疯子之间的微妙界限,介绍了如何利用巨人的工具提升自我,以及如何通过科学决策、数据洞察和智慧的尺度来指导我们的生活和工作。 ... [详细]
  • 深入理解小程序中的Picker组件
    Picker组件是一种从屏幕底部弹出的滚动选择器,支持多种选择模式,包括普通选择器、多列选择器、时间选择器、日期选择器和省市区选择器。本文将详细介绍Picker的各种属性及其应用场景。 ... [详细]
  • 本题要求计算给定两个正整数a和b时,2的-a次方与2的-b次方之和,并将结果以最简分数形式表示。输入包括多组测试数据,每组数据包含两个在2到20范围内的整数。 ... [详细]
  • 深入理解动态链接库及其应用
    本文将探讨动态链接库的基本概念,包括Windows下的动态链接库(DLL)和Linux下的共享库(Shared Library),并详细介绍如何在Linux环境中创建和使用这些库。 ... [详细]
  • 本文介绍了如何通过在数据库表中增加一个字段来记录文章的访问次数,并提供了一个示例方法用于更新该字段值。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文将详细介绍如何安装和使用 CactiEZ 的中文版本,帮助那些对英文界面不太熟悉的用户轻松掌握这一强大的网络监控工具。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
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社区 版权所有