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

你可能感兴趣的文章
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
Now trying to drop the old temporary tablespace, the session hangs.
查看>>
nowcoder—Beauty of Trees
查看>>
np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
查看>>
npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
查看>>
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>
npm install 卡着不动的解决方法
查看>>
npm install 报错 EEXIST File exists 的解决方法
查看>>
npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
查看>>
npm install 报错 fatal: unable to connect to github.com 的解决方法
查看>>
npm install 报错 no such file or directory 的解决方法
查看>>
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm install无法生成node_modules的解决方法
查看>>
npm install的--save和--save-dev使用说明
查看>>
npm node pm2相关问题
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build报Cannot find module错误的解决方法
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
查看>>