博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本变量
阅读量:6481 次
发布时间:2019-06-23

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

既然是变量,自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名,哪些地方需要用变量的值。

自定义变量

shell变量不需要声明,随用随定义,给变量赋值的时候要注意

  • shell是空格敏感的
  • 使用{}确定变量的范围是个好习惯
$NEWENV =123                #等号前面有空格,不行NEWENV: command not found   $NEWENV= 123                #等号后面有空格,不行123: command not found  $NEWENV=123                 #RIGHT
$BRACE=123$echo $BRACEEEE$echo ${BRACE}EEE123EEE

位置变量

指shell脚本的命令参数,shell script将执行的命令放在存储在0,命令之后的参数依次存储在1,2...,可以通过取值(eg$0)利用这些变量,就可以编写带参数的脚本,当参数值大于9时,需要使用{}括起来,否则$10就相当于在$1之后加了字符0。注意,定义函数的参数列表也使用$1, $2 etc,注意与命令行的参数相区分,函数内的$1etc是用来传参的,但$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

@

传递给当前进程的命令行参数,如果置于双引号内,会展开为个别的参数, $@ 代表命令后接的每一个参数字符串,类似"$1", "$2", "$3". 否则和$*都是一样的。

*

当前进程的命令行参数,$* 代表命令后接的参数的集合字符串,类似"$1c$2c$3", c为分隔符,默认为空格键,加上" "表示一个字符串,不加和$@一样, 这两个参数可以用来将参数传递给其他脚本或函数

$cat ./shell.sh #!/bin/bashmy(){    echo $#}echo "$(my $@)"echo "$(my "$@")"echo "$(my $*)"echo "$(my "$*")"$./*.sh 11 "22 33" 444341

-

在引用时给予shell的选项

?

  • 前一个命令的退出状态,$?IMPORTANT,只和上一条命令有关
  • 如果上一条命令的执行成功,里面的值是0,否则里面的值是一个正数
  • 上一条test语句的返回结果,如果test结果为真,则为0,如果test结果为假,则为1
  • shell的函数的返回值只能使用$?接收

$

shell的进程编号(PID),可以通过$$获得其值

$echo $$3730

最近一个后台命令的进程编号,以此方式存储进程编号,即在终端中的histroy命令,可通过wait供之后使用

环境变量

我们所执行的任何一个程序,都是由父进程fork出来的一个子进程,子进程结束之后,将返回发哦父进程中去,当子进程被产生的时候,将会从父进程那里获得一定的资源分配,以及(更重要的是)继承父进程的环境。环境变量就是传递给子进程的变量,"遗传性"是区分本地变量和环境变量的决定性指针,环境变量只能从父进程到子进程单向继承,换句话说,在子进程中的环境如何变更,均不会影响父进程的环境。下面是几个比较常用的缺省继承环境变量的值,当前终端下更多环境变量的值可以使用export -p查看

ENV

一般引用则仅用于交互式shell中,展开为读取和启动时要执行的第一个文件的完整路径名称

HOME

表示家目录

IPS

分隔符,默认为空格,tab和换行

LINENO

刚执行过的行在脚本或函数的行编号

PPID

父进程的PID

PS1

主要的命令提示符,默认是$

PS2

行继续的命令提示符,默认是>

PS4

set +x 设置的执行跟踪的提示字符串,默认是+

PWD

当前的工作目录

$echo $LANGen_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=(var1 var2...)的形式定义,即元素使用空格分开,使用${arr[n]}访问数组编号为n的元素

$arr=(0 1 2 var)$echo "${arr[0]}"0$echo "${arr[3]}"var

我们也可以对元素进行单独赋值

$arr[3]=qq$echo "${arr[3]}"qq

显示数组的所有元素

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

显示数组中元素的个数

$echo "${#arr[@]}"4$echo "${#arr[*]}"4

转载于:https://www.cnblogs.com/xiaojiang1025/p/5958497.html

你可能感兴趣的文章
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>
MongoDB的基础使用
查看>>
进程间通信——命名管道
查看>>
ssh登陆不需要密码
查看>>
java mkdir()和mkdirs()区别
查看>>
OSChina 周六乱弹 ——揭秘后羿怎么死的
查看>>
IT人员的职业生涯规划
查看>>
sorry,you must have a tty to run sudo
查看>>
ios开发中使用正则表达式识别处理字符串中的URL
查看>>
项目中的积累,及常见小问题
查看>>
Python类型转换、数值操作(收藏)
查看>>
oracle11g dataguard 安装手册(转)
查看>>
1. Two Sum - Easy - Leetcode解题报告
查看>>
多线程---同步函数的锁是this(转载)
查看>>
鱼C记事本V1.0(下)- 零基础入门学习Delphi28
查看>>