winston 发表于 2012-2-17 13:56:13

shell 脚本初探基本脚本编译

才开始学习shell脚本,这篇文章是写给像我一样想接触shell脚本的菜鸟,迅速了解简单的shell脚本,请高手绕道而行……
(1)创建脚本文件
创建脚本文件其实就是创建一个文本文件,跟编写C类似,按照他的语法结构组织你想要的脚本就可以了。另外在编写脚本的时候建议使用vi,这样既可以联系编写脚本,又可以练习vi使用……一举两得!
首先看第一条规则:创建shell脚本时,必须在文件的第一行指明所使用的shell。格式如下:
#!/bin/bash
千万不要忘了这个!,在shell脚本中,#用作注释,通常是不做处理,但是shell脚本文件的第一行是一个特列。
首先创建一个文本文件shell_test,在文件中写入:

#!/bin/bash#this is the first shell demodatewho
在终端中运行该文件,第一次会出现command not found 错误,系统没有找到这个脚本文件,因为系统会在PATH环境变量里面指定的地方去查找命令。查看PATH环境变量的值:echo $PATH,你会发现值里面没有放置你写的shell命令的文件夹,这种时候有两种解决办法:
(1)将shell脚本文件所在的目录添加到PATH环境变量中(具体添加方式也有几种:例如export命令,或者直接修改.profile文件,这个可以查看环境变量文件介绍)
(2)在命令行中使用文件的绝对路径或者相对路径来引用shell脚本(例如在shell脚本的当前目录下执行 ./shell_test)
解决上述问题以后,开始执行该脚本,不幸的是又报错了“Permission denied”,权限不够,查看一下该文件的权限设置:
-rw-r--r--1 csc csc   51 2012-02-16 10:42 shell_test

可以看出,csc用户没有执行权限(可以通过umask查看默认权限设置),现在要修改该文件的权限,使csc具有可执行的权限:chmod u+x shell_test
权限设定完毕后,执行脚本命令:
csc@csc-desktop:~/shell_demo$ shell_test
2012年 02月 16日 星期四 10:58:23 CST
csc      tty7         2012-02-16 08:58 (:0)
csc      pts/0      2012-02-16 08:59 (:0.0)
csc      pts/1      2012-02-16 08:59 (:0.0)
csc      pts/2      2012-02-16 09:14 (:0.0)

恭喜您,已经成功编写了一个脚本文件……
脚本的内容是首先运行date命令,显示当前的日期和时间,然后运行who命令的输出,显示当前登录到该系统的用户。
(2)显示自定义消息
有些时候可能需要在shell脚本中加入自定义的文本内容用来输出到窗口或者文件中。使用echo命令可以实现:
修改脚本内容中添加:

#!/bin/bash#this is the first shell demoecho 系统时间是:dateecho 目前登录到系统的用户有:who运行结果:
系统时间是:
2012年 02月 16日 星期四 11:44:52 CST
目前登录到系统的用户有:
csc      tty7         2012-02-16 08:58 (:0)
csc      pts/0      2012-02-16 08:59 (:0.0)
csc      pts/1      2012-02-16 08:59 (:0.0)
csc      pts/2      2012-02-16 09:14 (:0.0)

瞧,已经输出了你自定义的消息……
(3)使用环境变量
变量的使用使得shell脚本更加灵活。shell脚本可以访问Linux系统中的环境变量,包括系统的名称,登录到系统的用户名,家目录,当前用户ID等。通过set命令可以查询到环境变量信息。点击可以查看常用的环境变量,这里我们使用脚本得到当前登录用户的UID值和登录名(LOGNAME)。访问变量是通过$符号来实现的。
修改脚本文件:

#!/bin/bash#this is the first shell demoecho 系统时间是:date#得到环境变量echo 当前登录用户的UID:$UIDecho 当前登录用户的名称:$LOGNAME运行结果:
系统时间是:
2012年 02月 16日 星期四 12:03:07 CST
当前登录用户的UID:1000
当前登录用户的名称:csc

(4)使用用户变量
shell脚本中可以设置自己的变量,自定义变量的名称和值。一般情况下系统的变量名称都是大写,用户自定义的变量名称是小写。用户定义变量的语法为:
var1=1
定义一个变量var1,其值为1。注意中间不能有空格,否则将无法识别变量。
修改脚本文件:


#!/bin/bash#this is the first shell demoecho 系统时间是:date#得到环境变量echo 当前登录用户的UID:$UIDecho 当前登录用户的名称:$LOGNAME#设置用户变量var1=20var2="this is var2"var3="this is var3"echo The value of var1 is:$var1echo The value of var2 is:$var2echo The value of var3 is:$var3运行结果:
当前登录用户的UID:1000
当前登录用户的名称:csc
The value of var1 is:20
The value of var2 is:this is var2
The value of var3 is:this is var3

(5)将执行命令后的输出赋值给变量
通常变量是一个不确定的值,有的时候需要将某个命令的输出赋给某个变量,然后进行操作。这里需要使用到反引号,反引号在键盘上根“~”号是一个键,而不是单引号,这一定要分清楚。
有一个常用的例子:生成当天的日志文件。编写这个脚本首先是要得到当前的日期:date +%y%m%d(以这种格式输出时间 )
修改脚本文件:

#!/bin/bash#this is the first shell demoecho 系统时间是:date#得到环境变量echo 当前登录用户的UID:$UIDecho 当前登录用户的名称:$LOGNAME#设置用户变量var1=20var2="this is var2"var3="this is var3"echo The value of var1 is:$var1echo The value of var2 is:$var2echo The value of var3 is:$var3#创建日志文件,下面使用的是反引号,意思是执行date命令filename=`date +%y%m%d`# >代表的是重定向输出,将ls /home/csc -al的输出写入到log.$filename文件中,filename是变量名称ls /home/csc -al > log.$filename
运行,你可以查看一下脚本的当前目录中出现了一个文件,看到文件的名字就了然了……
至此:shell之旅就正式开始了,也是学习shell的开始。推荐《Linux 命令行和shell脚本编程宝典》这本书,将的比较明白,这边文章也是出自学习该书之后……
《Linux 命令行和shell脚本编程宝典》
作者:cscmaker 发表于2012-2-16 12:29:26 原文链接

页: [1]
查看完整版本: shell 脚本初探基本脚本编译