浅入浅出shell

RobinLiew 2010-10-09

记得上大学时跟着别人选修了linux,老师在课程介绍时提到linux是非常重要的,而课程结束后脑袋仍一片空白,还是不知道linux是个啥东西,老师在我的"软硬兼施"下给了个及格,混得了些学分,也不枉我每次跑到教室去点名报道。参加工作后发现linux这个东西还真得有,必须的。当初在项目的需要下,临危受命,开始了我的shell之旅,此过程孤独漫长,痛苦并快乐着。本文不是和大家讲解shell具体的编程技术,为的是和大家探讨一下如何学习一门技术,熟练掌握应用到项目中。

它是什么?用来做什么?

万事万物存在就有其道理,正如windows下的批处理bat文件,在linux下可以利用sh文件执行一系列操作完成某项功能。其由linux命令,搭配shell脚本自身的语法和变量组成;linux命令是shell脚本的主要角色,犹如存储过程中的sql语句;对linux命令越熟悉,shell脚本的功能就可以发挥得越强大。shell脚本一般作为自动化工具使用,常见于产品的安装和部署,以及性能测试中大批量数据的构造。它的优点在于不需要输入一条linux命令,修改一个文件,完全自动化,对不熟悉linux命令的人傻瓜式的操作也很容易上手。自动化工具产品化,流程化后,大大缩短了产品安装部署的时间,屏蔽了各人之间操作的差异性,给工作效率带来了显著提高,提升了产品的竞争能力。

它的历史和编程基础

大家百度,google一下肯定比我说的清楚,起先是有bsh,后来发展了csh,tcsh,ksh,各种shell基本上差不多,只是在少数功能上使用的linux命令和变量不同而已。编写一个shell文件时,文件头首行要申明使用哪种类型的shell,文件体定义一些方法或函数,文件尾定义要执行的方法或函数;或者不定义方法或函数,将会按照从上到下的顺序执行。例子如下:

test.sh

#!/bin/ksh

print()

{

echo"thisistest"

}

main()

{

print

}

main$@

赋予test.sh文件可执行权限chmod+xtest.sh,执行文件./test.sh,输出结果"thisistest"。

这只是一个简单的例子,让大家对shell编程有个大致的了解,点到而止。当然编程里面可能还会用到变量的定义,变量的读取,if判断,for循环,管道,文字界面的输入输出等等,这些需要大家多找些资料来学习学习。

它用什么来开发?

最快速的方法就是用touch创建一个文件,然后使用vi工具进行编写;但是vi工具有时使用起来十分别扭,例如添加时前面行自动上移无法显示、无法在注释中输入中文等。介绍一种方便编写linux下文件的方法:

1。使用samba服务,为windows共享linux下的文件

(1)修改/etc/samba/smb.conf文件,添加samba用户test

[test]

path=/

writable=yes

readonly=no

browsable=yes

(2)配置samba用户密码

samba+atest

(3)重启samba服务

rcsmbrestart

至此我们就可以通过windows的运行输入\\linux系统的ip地址,输入用户名test和密码,完成后就可以像访问windows的网络共享文件一样访问linux下的共享文件了。

2。使用ue工具远程编写文件

右键点击"网络邻居",选择"映射网络驱动器",驱动器默认,文件夹输入"\\linux系统的ip地址\test",完成后打开ue工具就可以像编辑本地盘符下的文件一样编辑映射后的linux下的文件了。

它的功能扩展

除了shell自身的功能外,还可以在shell脚本中调用java程序,c程序来增强其功能,反之也可以用其他编程语言来执行shell脚本,当然前提条件是要有各自语言的执行环境。

最后来点FAQ吧

1。执行shell脚本时为什么一定要在当前目录,其他目录行不行?

设置PATH环境变量,将shell脚本的目录路径添加进去,就可以在其他目录执行了。

2。怎样调试shell脚本?

脚本中打开调试开关:set+x

3。shell脚本执行出错,多次检查程序仍发现不了问题或者之前脚本运行成功,后来突然运行出错?

这种情况最大的可能是在文件的格式问题上,

使用命令cat-vtest.sh检查文件是否是dos格式,查看每行的结尾处是否有"^M"

使用命令dos2unixtest.sh将文件由dos格式转换为unix格式,或者使用ue工具的dos转unix功能进行转换

4。shell脚本执行时有些命令的执行不想输出屏幕显示,怎么做?

将其输出到空设备文件,例如ls>/dev/null

5。在shell脚本中设置了环境变量,为什么后来使用环境变量却失效了?

执行脚本时生成了子进程,相当于父进程的一个副本,子进程环境变量的设置只会在子进程中有效,不会影响父进程。

6。linux命令有那么多的参数,记不住怎么办?

不需要记住,linux系统提供了详细的帮助功能。mancommand,就可以查看该command的详细用法了。

大家都有使用过linux的经验,为什么那些命令总是记不住呢,熟能生巧是至理名言,大家有针对性的多操作操作。或者逆向思维换种方式,以实现某种功能写个shell脚本,在写脚本的过程中尽量多的熟悉使用linux命令,或许有意想不到的效果。

相关推荐