Shell Script介绍及变量使用
2016-04-04 17:30
357 查看
本文及Shell Script介绍
文中有关Shell Script的介绍及代码大多出自参考资料中的Beginning Linux Programming。有关与Shell Script的介绍请参见Shell Script - Wikipedia。Hello World
按惯例第一个程序就是Hello World。#!/bin/sh # This is Hello World Program. echo "Hello World"
在Shell Script中,程序的注释以#开始,如第2行所示。程序第一行的
#!/bin/sh是一个特殊的注释,它告知系统通过!后的程序执行本程序。第4行的
echo命令的功能是显示一行文字,在这里即输出”Hello World”。
echo命令的更多用法可使用
man echo查看。
变量
变量概念与使用
Shell Script中的变量不需要事先声明。变量的命名需要遵守的规则有首字符必须为字母、变量名中不可以有空格、可以使用下划线(_)、不能使用标点符号以及不能使用关键字。因Linux是区分大小写的系统,所以变量名也是区分大小写的,如var与Var不是同一个变量。在Shell中,可以使用$来访问变量的内容,而要为变量赋值时仅需使用变量名即可。在默认情况下,变量以字符串的形式存储,即使赋予数值时也是如此。可以使用=为变量赋值,如
var=Hello,若字符串包含空格需要使用引号如
var="Hello World"。除此外也可以使用
read命令让用户输入数据赋值,如
read var。
在没有使用引号的情况下以及在双引号中,直接使用$加变量名将会使用变量的值;而在单引号中,将不会使用变量的值。所以在没有使用引号和在双引号的情况下,若要使用$且不让其获得变量的值,就需要使用\取消它的含义。下面将简单的演示变量的使用。
#!/bin/sh myvar="Hi there" echo $myvar echo "$myvar" echo '$myvar' echo \$myvar echo Enter some text # 此处不涉及变量的赋值,所以不需要使用引号 read myvar echo '$myvar' now equals $myvar exit 0
程序的运行结果为:
$ ./variable.sh Hi there Hi there $myvar $myvar Enter some text Hello World $myvar now equals Hello World
环境变量
环境变量通常使用大写字母作为名字,下面的表格中列举了几个环境变量及其作用。可以使用export命令将变量设置为环境变量。
变量名 | 说明 |
---|---|
$HOME | 当前用户的家目录 |
$PS1 | 命令提示符 |
$PS2 | 二级命令提示符 |
$IFS | 输入域分隔符 |
$0 | 脚本的名字 |
$# | 参数的个数 |
$$ | 脚本的进程号 |
参数变量
在使用脚本程序时如果带有参数,参数变量便会被创建。$#变量的值为参数的个数,若没有任何参数,它的值将为0。使用$加数字使用参数变量,数字的值对应着第几个参数变量,如$1即第一个参数变量。$*与$@将列出所有的参数,其区别为$*中参数的分隔受IFS的影响,而$@不受IFS影响,即使IFS为空其输出值也会被分隔。下面是一个使用了参数和环境变量的小程序。
#!/bin/sh salutation="hello" echo $salutation echo "The program $0 is now running" echo "The second parameter was $2" echo "The first parameter was $1" echo "The parameter list was $*" echo "The user's home directory is $HOME" exit 0
通过
./try_var.sh foo bar baz运行程序,
foo bar baz为程序的参数,程序运行结果如下。
$ ./try_var.sh foo bar baz hello The program ./try_var.sh is now running The second parameter was bar The first parameter was foo The parameter list was foo bar baz The user's home directory is /home/wind
全局变量与局部变量
在函数的使用中,可能会遇到变量名和函数外的某个全局变量的变量名相同的情况,这时候为了避免冲突便可以使用local建立一个局部变量。在函数中定义了局部变量后,即使与全局变量的变量名相同,在函数中使用该变量是使用局部变量。局部变量的生存周期仅限于该函数。下面是一个全部变量与局部变量的示例。
#!/bin/sh sample_text="global variable" foo() { local sample_text="local varable" echo "Function foo is executing" echo $sample_text } echo "script starting" echo $sample_text foo echo "script ended" echo $sample_text exit 0
运行该程序后得到的结果为。
script starting global variable Function foo is executing local varable script ended < 4000 span class="hljs-keyword">global variable
unset
unset命令的作用是删除变量或函数,但它不能删除shell本身定义的一些变量如IFS。
unset命令与将变量赋予空值的效果类似,但赋予空值后变量仍然存在,而unset的效果是将其从环境中删除。下面是一个使用了
unset命令的示例。
#!/bin/sh foo="Hello World" echo $foo unset foo echo $foo exit 0
运行该程序,它的结果如下。
Hello World
参考资料
Neil Matthew and Richard Stones, Beginning Linux Programming 4th Edition.相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天