pythonshell脚本编程100例_Shell脚本编程30分钟入门(小结)
pythonshell脚本编程100例_Shell脚本编程30分钟⼊门(⼩
结)
什么是Shell脚本
Shell脚本(英语:Shell script),⼜称Shell命令稿、程序化脚本,是⼀种电脑程序与⽂本⽂件,内容由⼀连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是⼀种脚本语⾔来设计,其运作⽅式与直译语⾔相当,由Unix shell扮演命令⾏解释器的⾓⾊,在读取shell脚本之后,依序运⾏其中的shell命令,之后输出结果。利⽤shell脚本可以进⾏系统管理,⽂件操作等。
立夏习俗⽰例
看个例⼦吧:
#!/bin/sh
cd ~
mkdir shell_tut
cd shell_tut
for ((i=0; i<10; i++)); do
touch test_$i.txt
done
⽰例解释
·第1⾏:指定脚本解释器,这⾥是⽤/bin/sh做解释器的
·第2⾏:切换到当前⽤户的home⽬录
·第3⾏:创建⼀个⽬录shell_tut
·第4⾏:切换到shell_tut⽬录
·第5⾏:循环条件,⼀共循环10次
·第6⾏:创建⼀个test_1…10.txt⽂件
·
第7⾏:循环体结束
cd, mkdir, touch都是系统⾃带的程序,⼀般在/bin或者/usr/bin⽬录下。for, do, done是sh脚本语⾔的关键字。
shell和shell脚本的概念
shell是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。Ken Thompson的sh是第⼀种Unix Shell,Windows Explorer是⼀个典型的图形界⾯Shell。
shell脚本(shell script),是⼀种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script 是两个不同的概念。由于习惯的原因,简洁起见,本⽂出现的“shell编程”都是指shell脚本编程,不是指开发shell⾃⾝(如Windows Explorer扩展开发)。
环境
shell编程跟java、php编程⼀样,只要有⼀个能编写代码的⽂本编辑器和⼀个能解释执⾏的脚本解释器就可以了。
OS
当前主流的操作系统都⽀持shell编程,本⽂档所述的shell编程是指Linux下的shell,讲的基本都是POSIX标准下的功能,所以,也适⽤于Unix及BSD(如Mac OS)。
Linux
Linux默认安装就带了shell解释器。
Mac OS
Mac OS不仅带了sh、bash这两个最基础的解释器,还内置了ksh、csh、zsh等不常⽤的解释器。上如何交新农合作医疗费
Windows上的模拟器
windows出⼚时没有内置shell解释器,需要⾃⾏安装,为了同时能⽤grep, awk, curl等⼯具,最好装⼀个cygwin或者mingw来模拟linux 环境。
·cygwin
·mingw
脚本解释器
sh
即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的⼆进制⽂件路径通常是/bin/sh,由Bell Labs开发。
本⽂讲的是sh,如果你使⽤其它语⾔⽤作shell编程,请⾃⾏参考相应语⾔的⽂档。
bash
Bash是Bourne shell的替代品,属GNU Project,⼆进制⽂件路径通常是/bin/bash。业界通常混⽤bash、sh、和shell,⽐如你会经常在招聘运维⼯程师的⽂案中见到:熟悉Linux Bash编程,精通Shell编程。
在CentOS⾥,/bin/sh是⼀个指向/bin/bash的符号链接:
互联网赚钱
[root@centosraw ~]# ls -l /bin/*sh
精华素-rwxr-xr-x. 1 root root 903272 Feb 22 05:09 /bin/bash
-rwxr-xr-x. 1 root root 106216 Oct 17 2012 /bin/dash
lrwxrwxrwx. 1 root root 4 Mar 22 10:22 /bin/sh -> bash
但在Mac OS上不是,/bin/sh和/bin/bash是两个不同的⽂件,尽管它们的⼤⼩只相差100字节左右:
iMac:~ wuxiao$ ls -l /bin/*sh
-r-xr-xr-x 1 root wheel 1371648 6 Nov 16:52 /bin/bash
-rwxr-xr-x 2 root wheel 772992 6 Nov 16:52 /bin/csh
-r-xr-xr-x 1 root wheel 2180736 6 Nov 16:52 /bin/ksh
-r-xr-xr-x 1 root wheel 1371712 6 Nov 16:52 /bin/sh
-rwxr-xr-x 2 root wheel 772992 6 Nov 16:52 /bin/tcsh
-rwxr-xr-x 1 root wheel 1103984 6 Nov 16:52 /bin/zsh
⾼级编程语⾔
理论上讲,只要⼀门语⾔提供了解释器(⽽不仅是编译器),这门语⾔就可以胜任脚本编程,常见的解
释型语⾔都是可以⽤作脚本编程的,如:Perl、Tcl、Python、PHP、Ruby。Perl是最⽼牌的脚本编程语⾔了,Python这些年也成了⼀些linux发⾏版的预置解释器。
编译型语⾔,只要有解释器,也可以⽤作脚本编程,如C shell是内置的(/bin/csh),Java有第三⽅解释器Jshell,Ada有收费的解释器AdaScript。
如下是⼀个PHP Shell Script⽰例(假设⽂件名叫test.php):
#!/usr/bin/php
for ($i=0; $i < 10; $i++)
echo $i . "\n";
执⾏:
/usr/bin/php test.php
或者:
chmod +x test.php
./test.php
如何选择shell编程语⾔
熟悉 vs 陌⽣
如果你已经掌握了⼀门编程语⾔(如PHP、Python、Java、JavaScript),建议你就直接使⽤这门语⾔编写脚本程序,虽然某些地⽅会有点啰嗦,但你能利⽤在这门语⾔领域⾥的经验(单元测试、单步调试、IDE、第三⽅类库)。
新增的学习成本很⼩,只要学会怎么使⽤shell解释器(Jshell、AdaScript)就可以了。
简单 vs ⾼级
如果你觉得⾃⼰熟悉的语⾔(如Java、C)写shell脚本实在太啰嗦,你只是想做⼀些备份⽂件、安装软件、下载数据之类的事情,学着使⽤sh,bash会是⼀个好主意。
shell只定义了⼀个⾮常简单的编程语⾔,所以,如果你的脚本程序复杂度较⾼,或者要操作的数据结构⽐较复杂,那么还是应该使⽤Python、Perl这样的脚本语⾔,或者是你本来就已经很擅长的⾼级语⾔。因为sh和bash在这⽅⾯很弱,⽐如说:
··它的函数只能返回字串,⽆法返回数组
··它不⽀持⾯向对象,你⽆法实现⼀些优雅的设计模式
··它是解释型的,⼀边解释⼀边执⾏,连PHP那种预编译都不是,如果你的脚本包含错误(例如调⽤了不存在的函数),只要没执⾏到这⼀⾏,就不会报错
环境兼容性豆腐怎么做好吃
如果你的脚本是提供给别的⽤户使⽤,使⽤sh或者bash,你的脚本将具有最好的环境兼容性,perl很早就是linux标配了,python这些年也成了⼀些linux发⾏版的标配,⾄于mac os,它默认安装了perl、python、ruby、php、java等主流编程语⾔。
第⼀个shell脚本
编写
打开⽂本编辑器,新建⼀个⽂件,扩展名为sh(sh代表shell),扩展名并不影响脚本执⾏,见名知意就好,如果你⽤php写shell 脚本,扩展名就⽤php好了。
输⼊⼀些代码,第⼀⾏⼀般是这样:
#!/bin/bash
#!/usr/bin/php
“#!”是⼀个约定的标记,它告诉系统这个脚本需要什么解释器来执⾏。
运⾏
运⾏Shell脚本有两种⽅法:
作为可执⾏程序
chmod +x test.sh
./test.sh
注意,⼀定要写成./test.sh,⽽不是test.sh,运⾏其它⼆进制的程序也⼀样,直接写test.sh,linux系统会去PATH⾥寻有没有叫test.sh 的,⽽只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH⾥,你的当前⽬录通常不在PATH⾥,所以写成test.sh是会不到命令的,要⽤./test.sh告诉系统说,就在当前⽬录。
通过这种⽅式运⾏bash脚本,第⼀⾏⼀定要写对,好让系统查到正确的解释器。
这⾥的"系统",其实就是shell这个应⽤程序(想象⼀下Windows Explorer),但我故意写成系统,是⽅便理解,既然这个系统就是指shell,那么⼀个使⽤/bin/sh作为解释器的脚本是不是可以省去第⼀⾏呢?是的。
作为解释器参数
这种运⾏⽅式是,直接运⾏解释器,其参数就是shell脚本的⽂件名,如:
/bin/sh test.sh
/bin/php test.php
这种⽅式运⾏的脚本,不需要在第⼀⾏指定解释器信息,写了也没⽤。
变量
定义变量
定义变量时,变量名不加美元符号($),如:
your_name="qinjx"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语⾔都不⼀样。
除了显式地直接赋值,还可以⽤语句给变量赋值,如:
for file in `ls /etc`
使⽤变量
使⽤⼀个定义过的变量,只要在变量名前⾯加美元符号即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
变量名外⾯的花括号是可选的,加不加都⾏,加花括号是为了帮助解释器识别变量的边界,⽐如下⾯这种情况:
for skill in Ada Coffe Action Java; do邮政网上银行转账
echo "I am good at ${skill}Script"
done
如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成⼀个变量(其值为空),代码执⾏结果就不是我们期望的样⼦了。
推荐给所有变量加上花括号,这是个好的编程习惯。IntelliJ IDEA编写shell script时,IDE就会提⽰加花括号。
重定义变量
已定义的变量,可以被重新定义,如:
your_name="qinjx"
echo $your_name
your_name="alibaba"
echo $your_name
这样写是合法的,但注意,第⼆次赋值的时候不能写$your_name="alibaba",使⽤变量的时候才加美元符。
注释
以“#”开头的⾏就是注释,会被解释器忽略。
多⾏注释
sh⾥没有多⾏注释,只能每⼀⾏加⼀个#号。就像这样:
#--------------------------------------------
# 功能:⾃动为etao ios app打包,产出物为14个渠道的ipa包
# 特⾊:全⾃动打包,不需要输⼊任何参数
#--------------------------------------------
> ⽤户配置区 开始 >
#
#
# 项⽬根⽬录,推荐将此脚本放在项⽬的根⽬录,这⾥就不⽤改了
# 应⽤名,确保和Xcode⾥Product下的target_name.app名字⼀致
#
> ⽤户配置区 结束 >
如果在开发过程中,遇到⼤段的代码需要临时注释起来,过⼀会⼉⼜取消注释,怎么办呢?每⼀⾏加个#符号太费⼒了,可以把这⼀段要注释的代码⽤⼀对花括号括起来,定义成⼀个函数,没有地⽅调⽤这个函数,这块代码就不会执⾏,达到了和注释⼀样的效果。
字符串
字符串是shell编程中最常⽤最有⽤的数据类型(除了数字和字符串,也没啥其它类型好⽤了,哈哈),字符串可以⽤单引号,也可以⽤双引号,也可以不⽤引号。单双引号的区别跟PHP类似。
单引号
str='this is a string'
单引号字符串的限制:
·单引号⾥的任何字符都会原样输出,单引号字符串中的变量是⽆效的
·单引号字串中不能出现单引号(对单引号使⽤转义符后也不⾏)
双引号
str="Hello, I know your are \"$your_name\"! \n"
·双引号⾥可以有变量
·双引号⾥可以出现转义字符
字符串操作
拼接字符串
your_name="qinjx"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论