博客
关于我
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/

你可能感兴趣的文章
postgresql 更新多列数据
查看>>
PostgreSQL 服务启动后停止
查看>>
PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
查看>>
PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
查看>>
Qt开发——简易调色板QPalette
查看>>
PostgreSQL-解决连接时遇到的乱码问题
查看>>
PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
查看>>
PostgreSQL9.1 双机部署配置(主备数据同步)
查看>>
Qt开发——简易网络浏览器(一)
查看>>
Qt开发——简易成绩登记系统
查看>>
Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
查看>>
Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
查看>>
Postgresql中的表结构和数据同步/数据传输到Mysql
查看>>
Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在
查看>>
postgreSQL入门命令
查看>>
PostgreSQL删除数据库报"ERROR: There is 1 other session using the database."
查看>>
Qt开发——爱情公寓人事管理系统
查看>>
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
查看>>
Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入
查看>>
PostgreSQL在何处处理 sql查询之四
查看>>