脚本编程所涉及到的知识点总结推荐

脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。 脚本可以自动化完成某个工作,所以说写好脚本可以使运维工程师的工作更加轻松。 shell script是利用shell的功能所写的一个 程序 (program),这个程序是使用纯文本文件,将一些shell的语法或命令写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。学习shell script的好处: 1、自动化管理(比如说把每天都需要手动执行的任务写成一个脚本,让其在指定的时间内运行) 2、追踪与管理系统 (比如说启动Linux 服务) 3、简单的入侵检测功能 (比如说可以写一个脚本,让其自动检测系统有没有异常,如果有异常,就通知管理员或立即加强防火墙规则) 4、连续命令单一化 (是指整合一些在命令行执行的连续命令,将它们写在脚本中,而后直接执行脚本就OK了) 5、简易的数据处理 (比如说比较两个数据的比较、字符串是否相等) 6、跨平台 7、可以帮助我们弄清楚Linux的来龙去脉下面就开始脚本编程的基础知识学习吧 !一、善于使用判断式: test命令和判断符号[]都可以用于测试字符串、文件状态和数字,也可以同控制流结合。 语法格式: test 条件判断式 [ 条件判断式 ] 注意:中括号和条件判断式之间必须要有空格1、字符串测试:=(或==) 两个字符串是否相等!= 两个字符串是否不相等 -z 判断字符串是否为空,若为空则为真-n 判断字符串是否为不空,若为不空则为真2、文件类型判断:-e 该文件名是否存在-f 该文件名是否存在并且为文件 -d 该文件名是否存在并且为目录-L 该文件名是否存在并且为链接文件-b 该文件名是否存在并且为块设备-c 该文件名是否存在并且为字符设备-p 该文件名是否存在并且为管道文件-s 该文件名是否存在并且为套接字文件3、文件权限检测:-r 该文件名是否存在并且具有可读权限-w 该文件名是否存在并且具有可写权限-x 该文件名是否存在并且具有可执行权限-u 该文件名是否存在并且具有SUID属性-g 该文件名是否存在并且具有SGID属性-k 该文件名是否存在并且具有Sticky属性-s 该文件名是否存在并且为非空白文件4、数值测试:-eq 两个数值相等(equal)-ne 两个数值不等(not equal)-gt 数值1大于数值2(greater than)-lt 数值1小于数值2(less than)-ge 数值1大于等于数值2(greater than or equal)-le 数值1小于等于数值2(less than or equal)5、多重条件判断:-a, 逻辑与-o,|| 逻辑或二、条件判断式用法详解:1、if条件判断 if条件判断是指当符合某个条件时就执行。单分支if语句:单分支的if语句是最简单的选择结构,这种结构只判断指定的条件,当 条件成立 时执行相应的操作。否则不做任何操作,语句格式如下:if [条件判断式];then statement 写一个脚本,使用if语句计算2个数的大小,如果数字2大于数字1,就显示数字2 数字1 。脚本内容如下:

#!/bin/bash#Name:compare#Description:comparethesizeoftwonumbers#Author:Linli#Version:0.0.1#Datatime:06/16/1214:15:00#Usage:./compare.shNUM1NUM2#####scripts########if[$1-le$2];thenecho $2 $1 fi#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./compare.sh233 2

双分支if语句:双分支的if语句使用了两路命令操作。在条件成立或不成立的时候分别执行不同的命令序列,,格式如下:if [条件判断式];then statement statement 补充上面的脚本,如果数字2不大于数字1,就显示数字2 =数字1。 将上面脚本中的scripts中的内容修改为如下内容:

#####scripts########if[$1-le$2];thenecho $2 $1 elseecho $2 =$1 fi#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./compare.sh311 =3

多分支if语句:多分支if语句,可以进行多次判断,格式如下if [条件判断式];then statement 1elif [条件判断式];then statement 2elif [条件判断式];then statement n 补充上面的脚本,如果数字2小于数字1,就显示数字2 数字1,否则就显示数字2=数字1。 将上面脚本中的scripts中的内容修改为如下内容:

#####scripts########if[$1-lt$2];thenecho $2 $1 elif[$1-gt$2]echo $2 $1 elseecho $2=$1 fi#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./compare.sh311 3[root@www.magedu.comscripts]#./compare.sh3333=3

2、case…esac 常用于一个变量可能有多个变量值,每一个变量值执行不同的代码段。使用格式:case $变量名称 in变量值1) statement ;;变量值2) statement ;; statement ;; 写一个脚本,使用case语句完成以下功能: 1、提示用户输入一个用户名; 2、显示一个菜单给用户,形如: U|u show UID G|g show GID S|s show SHELL Q|q quit 。 3、提醒用户选择一个选项,并显示其所选择的内容;脚本内容如下:

#!/bin/bash#Name:menu#Description:case#Author:Linli#Version:0.0.1#Datatime:06/17/1215:00:00#Usage:./menu.sh#####scripts########read-p Pleasekeyinanusername: namecat EOFU|u)showUIDG|g)showGIDS|s)showSHELLQ|q)quitEOFread-p Pleasekeyinyourchoice: choicecase$choiceinU|u)id-u$name;;G|g)id-g$name;;S|s)grep ^$name /etc/passwd|cut-d:-f7;;Q|q)echo quit exit0;;esac#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./menu.shPleasekeyinanusername:binU|u)showUIDG|g)showGIDS|s)showSHELLQ|q)quitPleasekeyinyourchoice:u1

3、脚本functionshell script中的函数就是自定义一段执行代码,也可以说成是一些功能模块,有利于结构化编程和代码重用。脚本function的使用格式:function 函数名 { statement函数名() { statement 写一个脚本: 使用函数实现: 1、判断一个用户是否存在,用户名通过参数传递而来; 如果存在,就显示此用户的shell和UID 如果不存在,就说此用户不存在; 2、提示用户输入用户名,而后将其传递给上面的函数; 3、判断结束后不退出,而是提示用户可继续输入其它用户名,或输入(quit)退出;脚本内容如下:

#!/bin/bash#Name:user#Description:function#Author:Linli#Version:0.0.1#Datatime:06/17/1215:40:00#Usage:./user.sh#####scripts########myuser(){if`grep $1 /etc/passwd /dev/null`;thenecho shell:`grep ^$1 /etc/passwd|cut-d:-f7`UID:`id-u$1` elseecho Thisuserisnotexist... fi}read-p Pleasekeyinanusername: nameuntil[ $name == quit ];domyuser$nameread-p Youcancontinuekeyinanusername: namedoneecho quit #####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./user.shPleasekeyinanusername:rootshell:/bin/bashUID:0Youcancontinuekeyinanusername:binshell:/sbin/nologinUID:1Youcancontinuekeyinanusername:gentooshell:/bin/bashUID:502Youcancontinuekeyinanusername:quitquit[root@www.magedu.comscripts]#

函数的返回值是函数调用时所执行的函数体中的最后一条语句的状态返回值;可以使用return命令自定义函数返回值。 循环分为不定循环和固定循环(即循环几次是事先定义好的)1、不定循环 不定循环是指符合指定的条件就循环执行某段代码段。 不定循环有:while..do..done 、 until..do..done 使用格式为: while [ 条件判断式 ];do statement done until [ 条件判断式 ];do statement done注意:while是指符合条件判断时才开始循环,直到条件不满足时退出。 until是指不符合条件判断时才开始循环,直到条件满足时退出。 写一个脚本:计算100以内整数的和脚本内容如下:

#!/bin/bash#Name:sum#Description:while#Author:Linli#Version:0.0.1#Datatime:06/17/1216:10:00#Usage:./sum.sh#####scripts########declare-isum=0declare-iI=1while[$I-le100];dosum+=$IletI++doneecho 1+2+3+..+100=$sum #####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./sum.sh1+2+3+..+100=5050

写一个脚本,显示此分区使用率的相关信息: 1、提醒用户输入一个分区,而后显示其使用率信息; 2、直到用户输入q或Q退出;脚本内容如下:

#!/bin/bash#Name:disk#Description:until#Author:Linli#Version:0.0.1#Datatime:06/17/1216:55:00#Usage:./disk.sh#####scripts########read-p Pleasekeyinadiskpartition: diskuntil[ $disk == q -o $disk == Q ];dofdisk-l$diskdoneecho quit #####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./disk.shPleasekeyinadiskpartition:/dev/sdaDisk/dev/sda:343.5GB,343597383680bytes255heads,63sectors/track,41773cylindersUnits=cylindersof16065*512=8225280bytesDeviceBootStartEndBlocksIdSystem/dev/sda1*11310439183Linux/dev/sda2145235419457158eLinuxLVM/dev/sda3523653661052257+82Linuxswap/Solaris/dev/sda4536741773292439227+5Extended/dev/sda5536759754891761fdLinuxraidautodetect/dev/sda6597665844891761fdLinuxraidautodetect/dev/sda7658571934891761fdLinuxraidautodetect/dev/sda8719478024891761fdLinuxraidautodetect/dev/sda97803901997755218eLinuxLVM/dev/sda1090201023697755218eLinuxLVM/dev/sda1110237104801959898+83LinuxPleasekeyinadiskpartition:qquit

补充while的相关知识点:while true;do statementwhile [1];do 这个和while true一样 statementdone while read LINE;do statementdone 文件路径下面来举例说明以上3种while循环的使用方法: 写一个脚本,使用while true;do..done 完成以下功能: 1、提示用户输入一个用户名; 2、显示一个菜单给用户,形如: U|u show UID G|g show GID S|s show SHELL Q|q quit 。 3、提醒用户选择一个选项,并显示其所选择的内容;显示完成后不退出,继续提示用户输入选项。脚本内容如下:

#!/bin/bash#Name:menu#Description:case#Author:Linli#Version:0.0.1#Datatime:06/17/1217:30:00#Usage:./menu.sh#####scripts########read-p Pleasekeyinanusername: namecat EOFU|u)showUIDG|g)showGIDS|s)showSHELLQ|q)quitEOFwhiletrue;doread-p Pleasekeyinyourchoice: choicecase$choiceinU|u)id-u$name;;G|g)id-g$name;;S|s)grep ^$name /etc/passwd|cut-d:-f7;;Q|q)echo quit exit0;;?)echo Wrongchoice continue;;esacdone#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./menu.shbashmenu2.shPleasekeyinanusername:rootU|u)showUIDG|g)showGIDS|s)showSHELLQ|q)quitPleasekeyinyourchoice:u0Pleasekeyinyourchoice:tWrongchoicePleasekeyinyourchoice:s/bin/bashPleasekeyinyourchoice:g0Pleasekeyinyourchoice:qquit

写一个脚本,使用while read LINE;do..done 完成以下功能:显示/etc/passwd中的每一行内容。脚本内容如下:

#!/bin/bash#Name:read#Description:whilereadLINE#Author:Linli#Version:0.0.1#Datatime:06/17/1217:30:00#Usage:./read.sh#####scripts########whilereadLINE;doecho $LINE  echo OK done /etc/passwd#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./line.shroot:x:0:0:root:/root:/bin/bashOKbin:x:1:1:bin:/bin:/sbin/nologinOKdaemon:x:2:2:daemon:/sbin:/sbin/nologinOKadm:x:3:4:adm:/var/adm:/sbin/nologinOK... [显示的其它内容省略了]

2、固定循环 固定循环是指事先规定好循环几次。 使用格式为: for 变量 in LIST;do statement done 写一个脚本,显示每一位用户的默认shell; eg. root: /bin/bash student: /bin/bash脚本内容如下:

#!/bin/bash#Name:shell#Description:for#Author:Linli#Version:0.0.1#Datatime:06/17/1217:20:00#Usage:./shell.sh#####scripts########forIin`cut-d:-f1/etc/passwd`;doecho $I:`grep ^$I /etc/passwd|cut-d:-f7` done#####scripts########

脚本执行结果如下:

[root@www.magedu.comscripts]#./oddsum.shroot:/bin/bashbin:/sbin/nologin...[其他显示内容省略了]

四、break、continue、exit、return的用法break : 中断循环,而后执行循环后面的语句continue: 中断当前这一次循环,提前进入下一次循环exit: 直接退出脚本return: 用作自定义返回值

而是他们在同伴们都睡着的时候,一步步艰辛地向上攀爬的。

脚本编程所涉及到的知识点总结推荐

相关文章:

你感兴趣的文章:

标签云: