`
memorymyann
  • 浏览: 266340 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

shell中的变量

阅读更多

变量不需要声明在shell中,对一个变量赋值就像这样 myvar='hello world',注意的是=号2端不要有空格,这和我们JAVA中为了程序好看常常带空格不一样,这里有空格,你就会发现这个变量用不了。

 

1变量

 

上面是变量的声明,如果你想引用这个变量那么他的方式是$myvar,在之前带上$符号,下面写一个简单的例子

#!/bin/sh

 

myvar='hello world'

echo $myvar

exit 0

 

这就是一个很简单的shell脚本了。

 

2引号的使用

 

单引号:被单引号框住的是一个普通的字符串,里面任何一个字符都是普通字符串,特殊的字符串都失去了其特殊含义,例如

myvar1='hello world'

myvar2='$myvar1'

myvar3=$myvar1

大家可以自己打印看看这3个变量的值到底是什么。

 

双引号:双引号是部分忽略特殊字符,例如他会忽略空格符,但他不会忽略单引号,$和转义符号\。大家可以试试echo "$PATH"看看和echo '$PATH'2个指令就能看出他们的不同。

 

反引号:键盘左上角的那个引号键,被反引号括起来的字符串应该是个指令,反引号的意思就是执行这个指令并把它的输出结果替换成所有反引号之间的内容。举个例子,从错误开始shell中没有haha这个指令,你额外加的不算。 我们执行echo `haha`你就能看到报错信息了。其次,我们知道pwd指令是显示当前目录,那么执行下echo `pwd`就能看到效果了。

 

所以大家在给字符串赋值时候最好带上双引号或者单引号(用哪一个取决于你的需要),不管有没有必要,带上总是有好处的。

 

3环境变量

shell打开后就有一些变量已经被初始化了,例如输入echo $PATH你就会看到PATH变量的值,(为什么要带$, 我想前面说的比较清楚了),那么大家会有疑问,这些变量是什么时候被初始化的,以及他们到底有什么作用呢?shell中有一个指令是export,我们shell是一个进程,我们在打开这个shell时候,这个shell本身就会加载很多shell脚本,例如你执行

cd

ls -al

就会发现很多隐藏了的文件,其中一个是.bash_profile.打开看看就会发现export这个指令,这个指令export PATH意思就是从PATH变量被导出了,从此以后这个目录所代表的用户打开的shell都会认识这个变量,有这个shell打开的所有子进程也都会认识这个变量(每个用户都有自己的目录,每个目录都会有.bash_profile,所以当你手动而不是用useradd指令去添加用户时候,记得编辑这个文件),你的这些PATH,HOME这些环境变量就是在这个时候被加载的。至于作用,HOME 变量告诉你主目录,PATH变量是SHELL用于寻找指令的目录,所以在安装JDK时候,你要让SHELL认识JAVA和JAVAC指令有2种选择,一个是把JAVA和JAVAC链接到PATH中那么多目录中任意一个目录中去。另一个选择就是把JAVA和JAVAC的目录加到PATH变量后,具体怎么做很简单,直接编辑.bash_profile文件,里面有样例,怎么添加就不用说了,不过记住的是每个用户的.bash_profile目录不同,记得别加错地方,当然还有其它加载文件,你在别处加也可以。

顺便带下.bash_logout文件,你不妨在里面加一个clear指令,然后保存,退出shell看看有什么作用,如果你是本机登录可能没什么效果,但如果你是openssh远程连接,就会发现你的openssh被清屏了在你退出的时候,当然你可以加其它一些指令。

 

4参数变量

和C代码,java代码的参数变量差不多了,比如下面这个shell脚本

[root@liumengli my_shell]# cat test.sh
#!/bin/sh

echo $1
exit 0
我们运行看看

[root@liumengli my_shell]# ./test.sh 'hello world'
hello world
[root@liumengli my_shell]# ./test.sh

[root@liumengli my_shell]#

意义很明显了吧,1是1号参数,2是2号参数。大家还可以试试0号参数,结果是你们意料之中的事情。参数是一空格符分开,如果参数带空格,用“或者'括起来就OK了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics