博客
关于我
shell脚本变量
阅读量:75 次
发布时间:2019-02-26

本文共 1757 字,大约阅读时间需要 5 分钟。

Shell 变量与脚本编写指南

Shell 变量是脚本编写中不可或缺的重要工具,熟练掌握变量的使用方法能够显著提升脚本的灵活性和实用性。本文将详细介绍 Shell 变量的相关知识,包括自定义变量、位置变量、内嵌变量、环境变量以及数组变量等。

自定义变量

在 Shell 中,变量的命名和赋值操作非常灵活。与其他编程语言不同,Shell 不需要事先声明变量,变量在使用时就会被定义。因此,在赋值时需要注意以下几点:

  • 空格敏感性:Shell 对空格高度敏感,变量名和赋值之间必须严格遵守格式要求。
  • 范围确定:使用花括号 {} 可以明确变量的作用范围,避免命名冲突。

正确的赋值格式应为:

$NEWENV=123

如果格式不正确,Shell 将无法识别变量。

此外,变量范围可以通过以下方式限定:

$BRACE=123$echo $BRACEEEE$echo ${BRACE}EEE123EEE

通过这种方式,可以确保变量值不会因上下文变化而受到影响。

位置变量

位置变量用于访问脚本执行时的命令参数,具体包括以下几个特殊变量:

  • $0:表示脚本的名称。
  • $1$9:分别表示脚本的第 1 到第 9 个参数。
  • ${10}:表示第 10 个参数及之后的所有参数(需要使用花括号)。
  • 在函数定义中,参数列表中的 $1$n 用于接收外部传递的参数,而 $0 仍然表示脚本名称。

示例:

$cat ./shell.sh#!/bin/bashecho "$10"echo "${10}"./*.sh 11 22 33 44 55 66 77 88 99 0011000

当脚本接收多个参数时,使用位置变量能够实现灵活的参数处理。

内嵌变量

内嵌变量用于获取当前进程的信息,常见的内嵌变量包括:

  • #:表示当前进程的参数个数,通常用于循环控制。
  • @:表示命令行传递的所有参数。如果放在双引号内,会展开为单个参数列表。
  • *:表示命令行传递的所有参数,和 $@ 的效果类似,但没有展开功能。

示例:

while [ $# != 0 ] do  case $1 in    ...  esac  shiftdone

此外,$? 用于获取前一个命令的退出状态,$$ 表示当前进程的进程 ID。

环境变量

环境变量是一组预定义的变量,用于配置系统的运行环境。常见的环境变量包括:

  • HOME:表示用户的家目录。
  • PATH:表示可执行文件的路径。
  • IFS:表示字段分隔符,默认为空格或 tab。
  • LINENO:表示脚本中刚执行的行号。
  • PPID:表示父进程的进程 ID。

环境变量的值通常通过 export 命令传递给子进程。例如:

$echo $LANG en_AU.UTF-8$echo "$LINENO" 8$echo "$PATH" /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/linux/toolchain/gcc-4.6.4/bin:.$echo "$PPID" 2647$ps auxUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDlinux     2647  0.0  2.2 110152 11540 ?        Rl   07:51   0:01 gnome-terminal$echo "$PWD" /home/linux

数组变量

Shell 支持数组变量,其定义方式为:

$arr=(0 1 2 var)

通过 ${arr[n]} 可以访问数组中指定位置的元素,$arr[@] 则表示数组的所有元素。

数组元素可以单独赋值:

$arr[3]=qq

并通过以下命令查看数组信息:

$echo "${arr[@]}" 0 1 2 qq$echo "${arr[*]}" 0 1 2 qq

数组的长度可以通过 ${#arr[@]}${#arr[*]} 查询。

通过以上知识,读者可以更高效地编写 Shell 脚本,充分发挥 Shell 的强大功能。

转载地址:http://sccz.baihongyu.com/

你可能感兴趣的文章
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>