首页 > 代码库 > Shell变量
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。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
例如:查看点Shell进程的ID
echo $$
命令行参数
运行脚本时,传递给脚本的参数为命令行参数,例如有以下脚本:
#!/bin/bashecho "当前Shell进程的ID为:$$"echo "文件名称:$0"echo "文件的第一个参数:$1"echo "文件的第二个1参数:$2"echo "传递给脚本的参数个数:$#"echo "传递给脚本或函数的所有参数:$*"
运行结果:
$* 和 $@ 的区别
#!/bin/bashecho "当前Shell进程的ID为:$$"echo "文件名称:$0"echo "文件的第一个参数:$1"echo "文件的第二个1参数:$2"echo "传递给脚本的参数个数:$#"echo "传递给脚本或函数的所有参数:$*"echo "\$*=" $*echo "\"\$*\"=" "$*"echo "\$@=" $@echo "\"\$@\"=" "$@"echo "print each param from \$*"for var in $*do echo "$var"doneecho "print each param from \$@"for var in $@do echo "$var"doneecho "print each param from \"\$*\""for var in "$*"do echo "$var"doneecho "print each param from \"\$@\""for var in "$@"do echo "$var"done
执行结果:
Shell变量
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。