您的位置:首页 > 运维架构 > Shell

Shell 编程快速入门

2015-12-17 14:13 429 查看
什么是Shell脚本? Shell脚本(英语Shellscript)是一种电脑程序与文本文件内容由一连串的shell命令组成经由UnixShell直译其内容后运作被当成是一种脚本语言来设计其运作方式与直译语言相当由Unixshell扮演命令行解释器的角色在读取shellscript之后依序运行其中的shell命令之后输出结果利用Shellscript可以进行系统管理文件操作等 在Unix及所有的类Unix系统中如LinuxFreeBSD等操作系统都存在ShellScript依照Unixshell的各种不同类型Shellscript也有各种不同方言在DOSOS/MicrosoftWindows中的批处理文件跟shellscript有类似的功能 来看一个实例 #!/bin/sh cd~ mkdirshell_tut cdshell_tut for((i=;i<;i++));do touchtest_$itxt done 实例解析 第行指定脚本解释器这里是用/bin/sh做解释器的 第行切换到当前用户的home目录 第行创建一个目录shell_tut 第行切换到shell_tut目录 第行循环条件一共循环次 第行创建一个test_…txt文件 第行循环体结束 cdmkdirtouch都是系统自带的程序一般在/bin或者/usr/bin目录下fordodone是sh脚本语言的关键字 环境 shell编程跟javaphp编程一样只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了 当前主流的操作系统都支持shell编程本文档所述的shell编程是指Linux下的shell讲的基本都是POSIX标准下的功能所以也适用于Unix及BSD(如MacOS) Linux Linux默认安装就带了shell解释器 MacOS MacOS不仅带了shbash这两个最基础的解释器还内置了kshcshzsh等不常用的解释器 Windows上的模拟器 windows出厂时没有内置shell解释器需要自行安装为了同时能用grepawkcurl等工具最好装一个cygwin或者mingw来模拟linux环境 cygwin mingw 脚本解释器 sh 即BourneshellPOSIX(PortableOperatingSystemInterface)标准的shell解释器它的二进制文件路径通常是/bin/sh由BellLabs开发 bash Bash是Bourneshell的替代品属GNUProject二进制文件路径通常是/bin/bash业界通常混用bashsh和shell比如你会经常在招聘运维工程师的文案中见到熟悉LinuxBash编程精通Shell编程 在CentOS里/bin/sh是一个指向/bin/bash的符号链接: [root@centosraw~]#lsl/bin/*sh rwxrxrxrootrootFeb:/bin/bash rwxrxrxrootrootOct/bin/dash lrwxrwxrwxrootrootMar:/bin/sh>bash 但在MacOS上不是/bin/sh和/bin/bash是两个不同的文件尽管它们的大小只相差字节左右: iMac:~wuxiao$lsl/bin/*sh rxrxrxrootwheelNov:/bin/bash rwxrxrxrootwheelNov:/bin/csh rxrxrxrootwheelNov:/bin/ksh rxrxrxrootwheelNov:/bin/sh rwxrxrxrootwheelNov:/bin/tcsh rwxrxrxrootwheelNov:/bin/zsh 高级编程语言 理论上讲只要一门语言提供了解释器(而不仅是编译器)这门语言就可以胜任脚本编程常见的解释型语言都是可以用作脚本编程的如PerlTclPythonPHPRubyPerl是最老牌的脚本编程语言了Python这些年也成了一些linux发行版的预置解释器 编译型语言只要有解释器也可以用作脚本编程如Cshell是内置的(/bin/csh)Java有第三方解释器JshellAda有收费的解释器AdaScript 如下是一个PHPShellScript示例(假设文件名叫testphp) #!/usr/bin/php <?php for($i=;$i<;$i++){ echo$i"\n"; } 执行 /usr/bin/phptestphp 或者 chmod+xtestphp /testphp 如何选择shell编程语言 熟悉vs陌生 如果你已经掌握了一门编程语言(如PHPPythonJavaJavaScript)建议你就直接使用这门语言编写脚本程序虽然某些地方会有点啰嗦但你能利用在这门语言领域里的经验(单元测试单步调试IDE第三方类库) 新增的学习成本很小只要学会怎么使用shell解释器(JshellAdaScript)就可以了 简单vs高级 如果你觉得自己熟悉的语言(如JavaC)写shell脚本实在太啰嗦你只是想做一些备份文件安装软件下载数据之类的事情学着使用shbash会是一个好主意 shell只定义了一个非常简单的编程语言所以如果你的脚本程序复杂度较高或者要操作的数据结构比较复杂那么还是应该使用PythonPerl这样的脚本语言或者是你本来就已经很擅长的高级语言因为sh和bash在这方面很弱比如说 它的函数只能返回字串无法返回数组 它不支持面向对象你无法实现一些优雅的设计模式 它是解释型的一边解释一边执行连PHP那种预编译都不是如果你的脚本包含错误(例如调用了不存在的函数)只要没执行到这一行就不会报错 环境兼容性 如果你的脚本是提供给别的用户使用使用sh或者bash你的脚本将具有最好的环境兼容性perl很早就是linux标配了python这些年也成了一些linux发行版的标配至于macos它默认安装了perlpythonrubyphpjava等主流编程语言 第一个shell脚本 编写 打开文本编辑器新建一个文件扩展名为sh(sh代表shell)扩展名并不影响脚本执行见名知意就好如果你用php写shell脚本扩展名就用php好了 输入一些代码第一行一般是这样 #!/bin/bash #!/usr/bin/php "#!"是一个约定的标记它告诉系统这个脚本需要什么解释器来执行 运行 运行Shell脚本有两种方法 运行Shell脚本有两种方法 作为可执行程序 chmod+xtestsh /testsh 注意一定要写成/testsh而不是testsh运行其它二进制的程序也一样直接写testshlinux系统会去PATH里寻找有没有叫testsh的而只有/bin/sbin/usr/bin/usr/sbin等在PATH里你的当前目录通常不在PATH里所以写成testsh是会找不到命令的要用/testsh告诉系统说就在当前目录找 通过这种方式运行bash脚本第一行一定要写对好让系统查找到正确的解释器 这里的"系统"其实就是shell这个应用程序(想象一下WindowsExplorer)但我故意写成系统是方便理解既然这个系统就是指shell那么一个使用/bin/sh作为解释器的脚本是不是可以省去第一行呢?是的 作为解释器参数 这种运行方式是直接运行解释器其参数就是shell脚本的文件名如 /bin/shtestsh /bin/phptestphp 这种方式运行的脚本不需要在第一行指定解释器信息写了也没用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息