04.我就特殊你咋地,变量那点事儿

前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。

例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:

#!/bin/bash

echo $$

运行结果

4914

命令行参数

运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

请看下面的脚本:

#!/bin/bash

echo "当前脚本文件名: $0"

echo "传递给脚本或函数的第一个参数 : $1"

echo "传递给脚本或函数的第二个参数 : $2"

echo "传递给脚本或函数的所有参数: [email protected]"

echo "传递给脚本或函数的所有参数: $*"

echo "传递给脚本或函数的参数个数 : $#"

执行: ./spaceva.sh caoliu is so niubi

输出结果:

当前脚本文件名: ./spaceva.sh

传递给脚本或函数的第一个参数 : caoliu

传递给脚本或函数的第二个参数 : is

传递给脚本或函数的所有参数: caoliu is so niubi

传递给脚本或函数的所有参数: caoliu is so niubi

传递给脚本或函数的参数个数 : 4

$* 和 [email protected] 的区别

$* 和 [email protected] 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"[email protected]" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

下面的例子可以清楚的看到 $* 和 [email protected] 的区别:

#!/bin/bash

echo "\$*=" $*

echo "\"\$*\"=" "$*"

echo "\[email protected]=" [email protected]

echo "\"\[email protected]\"=" "[email protected]"

echo "print each param from \$*"

for var in $*

do

echo "$var"

done

echo "print each param from \[email protected]"

for var in [email protected]

do

echo "$var"

done

echo "print each param from \"\$*\""

for var in "$*"

do

echo "$var"

done

echo "print each param from \"\[email protected]\""

for var in "[email protected]"

do

echo "$var"

done

执行 ./show.sh "a" "b" "c" "d",看到下面的结果:

$*=  a b c d
"$*"= a b c d
[email protected]=  a b c d
"[email protected]"= a b c d
print each param from $*
a
b
c
d
print each param from [email protected]
a
b
c
d
print each param from "$*"
a b c d
print each param from "[email protected]"
a
b
c
d

退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

不过,也有一些命令返回其他值,表示不同类型的错误。

#!/bin/bash

echo "当前脚本文件名: $0"

echo "传递给脚本或函数的第一个参数 : $1"

echo "传递给脚本或函数的第二个参数 : $2"

echo "传递给脚本或函数的所有参数: [email protected]"

echo "传递给脚本或函数的所有参数: $*"

echo "传递给脚本或函数的参数个数 : $#"

echo "上一个命令执行后的返回结果:$?"

下面例子中,命令成功执行:./spaceva.sh ad sd sd

当前脚本文件名: ./spaceva.sh

传递给脚本或函数的第一个参数 : ad

传递给脚本或函数的第二个参数 : sd

传递给脚本或函数的所有参数: ad sd sd

传递给脚本或函数的所有参数: ad sd sd

传递给脚本或函数的参数个数 : 3

上一个命令执行后的返回结果:0

时间: 2024-11-08 22:47:46

04.我就特殊你咋地,变量那点事儿的相关文章

Ubuntu 14.04 安装 jdk8u20 并配置环境变量 安装Android Studio

   Ubuntu 14.04 安装jdk并环境变量 jdk安装的前提:你的电脑里面没有安装openjdk,如果安装了,请先卸载 1.官网下载jdk:jdk-8u20-linux-x64.tar.gz 2.双击 jdk-8u20-linux-x64.tar.gz  提取文件到/home/ljk/JavaDevelop 目录下(你想要安装的那个目录,注意,在ubuuntu下,这个文件你一解压,就相当于已经安装了),提取完成后多出一个jdk1.8.0_20文件夹 3.CTRL+ALT+T打开终端,然

ubuntu10.04配置XMAPP中的环境变量

1. 显示环境变量:[[email protected] ~]# echo $PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin2. 修改环境变量,将 lampp/bin添加到配置文件下[[email protected] ~]# export PATH=$PATH:/opt/lampp/bin3. 输入命令,直接就能看到PH

Ubuntu14.04安装JDK与配置环境变量

工具/原料 Ubuntu14.04系统 方法/步骤 先从Oracle官网下载JDK.先选择同意按钮,然后根据自己的系统下载相应版本.我的系统是Ubuntu14.04 64位的,所以我下载 2 创建一个目录/usr/lib/jvm以便于把下载解压后的包放到这个目录下. 3 解压并把解压后的jdk1.8.0_25文件夹放到/usr/lib/jvm目录中.注意:我现在下载的安装包在Desktop目录下所以直接Desktop目录下在操作,如果你所下载的安装包不在Desktop目录下,请先cd进入相应目录

JavaScript变量声明那些事儿

声明和初始化不一样 声明 var joe; // the declaration 初始化 joe = 'plumber'; // the initialization 声明前置 你可以在函数的任何位置通过var声明变量,它们会像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(前置/置顶解析/预解析).当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误.看下面这个例子: var myname = "global"; (function() { alert

Ubuntu 16.04安装Java JDK

Java JDK有两个版本,一个开源版本Openjdk,还有一个Oracle官方版本jdk.下面记录在Ubuntu 16.04上安装Java JDK的步骤. 安装openjdk 更新软件包列表: $ sudo apt-get update 安装openjdk-8-jdk: $ sudo apt-get install openjdk-8-jdk 查看java版本: $ java -version 安装Oracle Java JDK 首先,安装依赖包: $ sudo apt-get install

走向面试之数据库基础:三、SQL进阶之变量、事务、存储过程与触发器

一.变量那点事儿 1.1 局部变量 (1)声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int (2)为变量赋值 SET @变量名 =值 --set用于普通的赋值 SELECT @变量名 = 值 --用于从表中查询数据并赋值,,可以一次给多个变量赋值 SET @name=‘张三’ SET @id = 1 SELECT @name = sName FROM student WHERE sId=@id (3)输出变量的值

细说Debug和Release区别

VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常.网上查找了些资料,在这 罗列汇总下,做为备忘- 一.Debug 和 Release 的区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化

自动化运维工具puppet(二)

一.Puppet作域与变量 1.作用域 作域的作就是指定特定的代码与其他的代码进隔离. 变量与默认资源将接受这些限制, 资 源标题. 资源引将不接受这样的限制. 接受范围限制的有: 变量 默认资源 不接受范围限制的有: 资源标题 资源引 在任何给定作域内, 可访问在本域中定义的变量或资源默认值, 同时继承作域中的内容, 依 此类推. 因此, 任何局部作域都可访问顶级作域中的内容. 使的范围是从该节点作域内直到 全局作域, 如下图所. 从上图可以看到: 在全局作域内只能访问作域的变量及默认值. 节

linux下批量创建10个系统账号,密码设置为随机字符串

#!/bin/sh for n in `seq -s " " -w 10` do passwd=`echo $RANDOM|md5sum |cut -c 1-8` useradd username$n && echo $passwd |passwd --stdin username$n done 通过seq -s " " -w 10以数字进行循环01 02 03 04 ... 通过系统环境变量$RANDOM,取随机字符,cut -c 取前面1-8位