shell-3.shell特殊变量

Shell 特殊变量
1.特殊变量名和含义

    变量名 含义   
    $0             脚本名字
    $1             位置参数 #1
    $2 - $9     位置参数 #2 - #9
    ${10}         位置参数 #10
    $#             位置参数的个数     sh test.sh XX YY   ,  $#就是2 是表示参数的个数
    $?            上个命令执行后,返回的执行命令状态结果, 或者是函数的返回值
    "$*"         所有的位置参数(作为单个字符串) *
    "[email protected]"         所有的位置参数(每个都作为独立的字符串)
    $$        当前shell进程ID。
    ${#*}         传递到脚本中的命令行参数的个数
    ${#@}         传递到脚本中的命令行参数的个数
    $_             之前命令的最后一个参数
    $!             运行在后台的最后一个作业的进程ID(PID)

2.【实例】
[[email protected] ~]# more third.sh
#!/bin/bash
#parm
echo "this is shellname: $0"
echo "this is parm1 :    $1"
echo "this is parm2 :    $2"
echo "show parm number : $#"
echo "show parm list :   $*"
echo "show parm list :   [email protected]"
echo "show parm number : ${#*}"
echo "show parm number : ${#@}"
echo "show process id:   $$"

运行结果:
[[email protected] ~]# sh third.sh no1var no2var
this is shellname: third.sh
this is parm1 :    no1var
this is parm2 :    no2var
show parm number : 2
show parm list :   no1var no2var
show parm list :   no1var no2var
show parm number : 2
show parm number : 2
show process id:   23650

[[email protected] ~]# echo $_
no2var

3.$* 和 [email protected] 的区别
[email protected] $* 只在被双引号包起来的时候才会有差异

这部分是在网上看到的,原创已经不知道是哪位了。(这个例子很能说明)
精确来讲,两者只有在 "" (双引号) 中才有差异,否则,都表示"全部参数"( $0 除外)。

举例来说好了:
sh my.sh p1 "p2 p3" p4 的话,
不管是 [email protected] 还是 $* ,都可得到 p1 p2 p3 p4 就是了。

但是,如果置于 "" (双引号)中的话:
"[email protected]" 则可得到 "p1" "p2 p3" "p4" 这三个不同的词段(word);
"$*" 则可得到 "p1 p2 p3 p4" 这一整串单一的词段。

我们可修改一下前面的 my.sh ,使之内容如下:
代码:
#!/bin/bash
my_fun() {
echo "$#"
}
echo ‘the number of parameter in "[email protected]" is ‘$(my_fun "[email protected]")
echo ‘the number of parameter in "$*" is ‘$(my_fun "$*")
然后再执行 sh my.sh p1 "p2 p3" p4 就知道 [email protected] 与 $* 差在哪了 ... ^_^
the number of parameter in "[email protected]" is 3
the number of parameter in "$*" is 1

【[email protected]  $* 的实例 说明】
[[email protected] ~]# cat a.txt
aaaaaaa

[[email protected] ~]# cat b.txt
bbbbbbb

[[email protected] ~]# cat c.sh
#!/bin/sh
cat $1

[[email protected] ~]# cat *.txt
aaaaaaa
bbbbbbb

[[email protected] ~]# sh c.sh *.txt
aaaaaaa

在c.sh中写了cat $1 为什么只显示一个文件中的内容, 但如果在命令行下cat *.txt就会显示2个文件信息
将c.sh 改成 cat [email protected] 就正常了
[[email protected] ~]# vim c.sh
#!/bin/sh
cat [email protected]    #(改成$* 也是可以的)
[[email protected] ~]# sh c.sh *.txt
aaaaaaa
bbbbbbb

4.$?
[[email protected] ~]# echo `hostname`
10-222
[[email protected] ~]# echo $?
0

[[email protected] ~]# grep ‘cpu cores‘ /proc/cpuinfo
cpu cores       : 1
[[email protected] ~]# echo $?
0

以下几个部分在后续内容介绍
$? 在函数的返回值会在后续的章节说明

以上是个人点点总结和理解,水平不高,文笔水平很烂,请各位大大见谅。
可以一起交流学习。

我的QQ:610851588
  可以加入我建的群(现在群人很少,希望慢慢多起来)
  Linux  群:183932302
  Python ,shell 交流群:469094734

时间: 2024-12-19 15:07:55

shell-3.shell特殊变量的相关文章

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

Linux/Unix shell sql 之间传递变量

灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 一.示例 [python] view plain copy print? 1.shell变量接受sql返回值之方式一 [email protected]:~> more ./retval

shell编程概述以及变量

动态语言:解释型语言,是一种弱类型的语言,特性:边解释边执行.例如:PHP.SHELL.python.perl 弱:变量用时声明,甚至不区分类型. 强:变量在使用前,必须事先声明,甚至还需要初始化 bash:本身就是一个软件,脚本解释器. shell脚本是面向过程的. bash变量类型: 环境变量 本地变量(局部变量) 位置变量 特殊变量 本地变量: VARNAME=VALUE;作用域:整个bash进程 局部变量 local VARNAME=VALUE:作用域:为当前代码段 环境变量:作用域为当

shell编程 Shell script 的默认变量($0, $1...)

Shell script 的默认变量($0, $1...) 我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限.那么 shell script 能不能在脚本文件名后面带有参数呢?很有趣喔!举例来说,如果你想要重新启动系统登录文件的功能,可以这样做: [[email protected] ~]# file /etc/init.d/syslog /etc/init.d/syslog: Bourne-Again shell script text executab

Linux Shell 01 脚本与变量

一 脚本的创建和执行 1. 创建文件*.sh,文件后缀为sh 2. 编辑脚本 首行必须为:#!/bin/bash   #指定解释脚本的shell 3. 赋权 chmod u+x a.sh 4. 执行 ./a.sh 二 shell脚本中的变量 1.变量的定义与删除 name="hello" #定义变量=前后不能有空格 unset name #删除变量 a. 当前shell中定义的变量只在当前shell有效 b. 不论是普通变量还是环境变量,归根结底都是变量,都遵循变量的基本操作 2.环境

shell 之解释器、变量、字符串、数组

1.Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.Shell 编程跟 java.php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash)

shell编程中的变量

变量就是其值可以变化的量;从实质来说,变量名是指向一片用于存储数据的内存空间;变量有本地变量.环境变量之分;shell变量是一种弱类型的变量,在声明变量时并不需要指定其变量类型,默认均为字符型;也不需要遵循C语言中"先声明再使用"的规定,任何时候想用就用; 本地变量:    是指只在某个shell中生效的变量,对其他shell无效,而且会随着当前shell的结束而消失;    本地变量的作用域被限定在声明它们的shell中;    为了让子shell继承当前shell的变量,可以使用e

Shell基础教程--2.变量和运算符

2.变量和运算符 2.1.变量的类型 本地变量:环境变量:变量替换(显示变量):位置变量:标准变量:特殊变量: 2.2.本地变量 本地变量在用户现在的shell生命周期的脚本中使用 在命令行, LOCALTEST="test" 设置本地变量,$ echo $LOCALTEST 显示本地变量 set 命令可以查看这个shell的生命周期有哪些本地变量 readonly LOCALTEST ,就可以将LOCALTEST设置成只读的本地变量,不能再对其进行赋值操作,此时若执行如 LOCALT

POSIX中shell下的常用变量、结束状态和test表达式

在开源的Unix系统中平时为了方便管理就一定会大量使用shell脚本,而在平时在写script的时候快速有效就是有很多内置的变量可以使用,在这里就简单总结整理下,以便于平时写script时快速查阅,POSIX中shell的内置变量如下: 变量 意义 # 目前进程的参数个数 @ 传递给当前进程的命令行参数 - 连字号,在引用时给予shell的参数选项 ? 前一命令的退出状态 $ shell进程的进程编号,一般用的是-bash进程 0 shel程序的名称 ! 最近一个后台命令的进程编号 ENV 一旦

【Linux】shell编程之给变量赋值的五种方法

1.  Shell中的变量类型 Shell中的变量可以分为环境变量.位置变量.预定义的特殊变量以及用户自定义变量. <!--[if !supportLists]-->2.  <!--[endif]-->环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名.部分系统变量的值由系统设定,部分环境变量的值可以由用户给定. 环境变量的名称由大写字母组成,常用的Shell环境变量如下所示: HOME: 用户主目录的全路径名,cd $