Shell变量

Posted Blue眼泪2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell变量相关的知识,希望对你有一定的参考价值。

第一个Shell脚本

创建一个文件,以.sh作为扩展名(注意Linux是没有扩展名这个概念的,可以随意取.s或者.甚至可以没有扩展名),这里取.sh是为了我们好识别这是个Shell脚本。

这里我在你自己想要存放文件的目录下创建一个Shell脚本,命名为first.sh

技术分享

在默认的vi编辑器中,第一行输入如下代码:

技术分享

第一行开头"#!"是一个约定的标记,特别重要,它告诉系统这个脚本需要什么解释器来执行,即哪一种Shell

第二句 echo命令后面加了字符串,表示在打印后面的字符串。再保存,退出。

怎么执行我们刚创建好的脚本呢?

chmod +x ./first.sh  #使脚本具有执行权限
./first.sh  #执行脚本,注意不能有空格

或者直接:

 sh first.sh  #注意在当前路径执行,否则写绝对路径 

技术分享

定义变量

在Shell脚本中变量名的几个要求:

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)。 

特别注意变量名和等号之间不能有空格

//正确:
myName="Jim"

//错误:
myName = "Jim"

在定义变量的时候,直接可以左边变量名,右边为值,中间用等号连接,在强调一遍(等号两边不能有空格

 定义变量举例:

stu_name="Jack"

stu_Num=12

我们怎么使用变量呢?在使用的时候,我们用$变量名,就可以输出对应得值

name="Jim"
echo $name

技术分享

但是我们最好在变量名前后加{},形式为:${变量名}

name="Jim"
echo ${name}

这样有几个好处,一是便于我们很直观的看出这是变量,还有一种情况就是看代码:

language="Java"
echo "I like $languageScript"

结果会输出: I like javascript 吗?会吗?系统很能智能的识别到language是变量吗?

你可以试试就知道了,不过我敢保证,下面这样肯定可以:

language="Java"
echo "I like ${language}Script"

结果:

技术分享

对吧,这样系统可以很好的识别到大括号括起来的是变量。

变量重新赋值

language="Java"
language="Shell"
echo "I like ${language}Script"

只读变量

readonly  变量名 

这样变量就是只读,不能修改了

技术分享

删除变量

unset  变量名 

删除后,结果输出就为空:

技术分享

特殊变量

变量含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
[email protected] 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

 

 

 

 

 

 

例如:查看点Shell进程的ID

echo $$

技术分享

 

命令行参数

运行脚本时,传递给脚本的参数为命令行参数,例如有以下脚本:

#!/bin/bash
echo "当前Shell进程的ID为:$$"
echo "文件名称:$0"
echo "文件的第一个参数:$1"
echo "文件的第二个1参数:$2"
echo "传递给脚本的参数个数:$#"
echo "传递给脚本或函数的所有参数:$*"

运行结果:

技术分享

$* 和 [email protected] 的区别

#!/bin/bash
echo "当前Shell进程的ID为:$$"
echo "文件名称:$0"
echo "文件的第一个参数:$1"
echo "文件的第二个1参数:$2"
echo "传递给脚本的参数个数:$#"
echo "传递给脚本或函数的所有参数:$*"
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

执行结果:

技术分享

 

以上是关于Shell变量的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程入门

代码片段:Shell脚本实现重复执行和多进程

玩转Bash变量

玩转Bash变量

2.5.2 变量

如何创建片段以重复变量编号中的代码行