




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Shell程序设计学习内容:1. 什么是shell2. 语法:变量、条件判断、程序控制3. 函数4. 命令和命令的执行5. Here文档6. 调试7. Grep命令和正则表达式8. Find命令一、 什么是shell? Shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。在一个linux系统中可以安装多个shell,这些shell和其他程序一起环绕在linux内核四周。默认安装的标准是/bin/sh,它是GNU工具集中的bash。使用/bin/bash version可以查看版本。Shell 历史版本:sh csh,、tcsh、 zsh ksh、pdksh bash二、 shell脚本编写、运行、调试1. 脚本均以 #!/bin/bash开头。2. 脚本中的 #为注释符。3. 使用exit为脚本设置返回一个退出码,注意 0 表示的是执行成功。示例: #!/bin/bash # this is my first shell! echo “helloword!” exit 04. 设置脚本为可执行: chmod u+x filename.sh5. 执行:./filename.sh6. sh x ./filename.sh三、 shell语法1、 变量:无需事先声明,直接使用,在访问时要加$在变量前。例如:Str=helloecho $Str a.这两行语句将在屏幕输出一个“hello”,shell区别大小写,定义变量时应该注意。b.如果为变量所赋的字符串中含有空格,table或换行符应使用“”标示,例如 “hello word!”c.变量在引号中依然有效如echo “this is $Str!”依然会输出:this is hello!练习示例:(注:后续的示例中只有关键部分,练习时补全)echo “input password:”read pasdecho “the password is $pasd”d.如果需要输出字符$Str可以用单引号 和 来处理: $Str 和$Str 输出的都是 $Str不是变量表示的值,shell中的变量一般都是字符串形式。e: 环境变量,介绍几种:$HOME 当前用户的家目录 $PATH 搜索命令的目录列表$0shell脚本的名字$#传递给脚本的参数个数$脚本的进程号f:参数变量:$1,$2脚本的程序参数$* 列出所有参数$ S*的一种变体,它参数不会挤在一块。g:变量做整形数字使用:a=123let “a +=1”echo “a = $a”2、 条件1) 使用 test 或 如 if test f file.cthen.fi 以上代码也可写成如下形式(尽量使用这种形式) if -f file.c (注意:if语句和之间有个空格 then . fi完整示例:#!/bin/bashecho “is it morning? Please answer yes or no”read timeofdayif $timeofday = “yes” ;then echo “good morning”else echo “good afternoon”fiexit 02) elif语句,在if,else语句中增加分支判断。如下示例: #!/bin/bashecho “is it morning? Please answer yes or no”read timeofdayif $timeofday = “yes” ;then echo “good morning”elif $timeofday = “no” then echo “Good afternoon”else echo “sorry ,$timeofday not recognized. Enter yes or no” exit 1fiexit 03、 一个与变量有关的问题。如上程序,如果没有输入Yes和no直接按回车键,会出现什么结果呢?程序会有出错信息。原因是。避免该问题产生的方法对变量使用双引号“$Str”4、 for语句使用for语句可以循环处理一组值,这组值可以是任意字符串的集合。 它的语法形式如下:for variable in valuesdo somethingdone 示例: #!/bin/bash For foo in hello myname 129 do echo $foo done exit 0使用通配符扩展for循环#!/bin/shfor file in $(ls *.sh);do echo $filedoneexit 05、while语句语法结构:while condition doDosometingdone示例:一个简陋的密码检查程序#!/bin/bashecho “Enter password”read pawordwhile “$paword” != “secret” do echo “sorry, try again ” read paword doneexit 0字符串比较:string = string string != string-n string-z string 算数比较 num1 eq num2 num1 ne num26、until语句,与while循环类似,只是把测试条件反过来了。语法形式如下:until conditiondo Dosomethingdone7、case语句语法结构:case variable inpattern1 | pattern ) dosomething ;pattern2 | pattern ) dosomething ;esac该语句 执行 vairable与第一个pattern匹配上的语句。例如:#!/bin/bashecho “is it morning? Please answer yes or no”read timeofdaycase “$timeofday” in yes ) echo “good moring”; no ) echo “good afternoon”;y) echo “good morning”;n) echo “good afternoon”;*)echo “sorry,answer not recognized” ; esac exit 0 匹配部分语句也可改写为: case “$timeofday” in yes | y | Yes | YES ) echo “good morning”; n* | N* ) echo “good afternoon”; *) echo “sorry, answer not recognized”; esac也可以将匹配行改为; yY|YyEeSs8、命令列表 有时需要将好几条命令连接成一个序列。如下 if -f this_file ; then if -f that_file ; then if -f the_other_file ; then echo “all files present, and correct” fi fifi9、AND列表 只有在前一条命令执行成功返回true才执行下一条。语法结构: Statement1 & Statement1 & Statement1 & 示例:#!/bin/bashtouch file_onerm f file_twoif -f file_one & echo “hello” & -f file_two & echo “there”then echo “in if”else echo “in else”fiexit 010、OR列表 ,直到有一条命令执行成功为止。 语法结构: Statement1 | Statement2 | Statement3 | 示例:if -f file_one | echo “hello” | echo “there”then echo “in if”elseecho “in else”fi11、语句块如果想在只允许使用单个语句的地方(如 AND,OR)使用多条语句,可以是花括号来构造一个块。如下: Get_confirm & echo “hello” cat $tmp_file $tracks_fileadd_record_tracks12、函数要定义一个shell函数,只需写出它的名字,加上括弧,再把函数要实现的语句放在一对花括号中,如下所示:function_name () Statements示例:#!/bin/bashfoo() echo “function foo is executing”echo “ this is foo ”fooecho “foo end!”exit 0如果在函数中没有return命令指定一个返回值,则函数返回的就是执行的最后一条命令的退出码。示例 #!/bin/bash# 函数部分Yes_or_no() Echo “is your name $* ?” while truedo echo n “Enter yes or no: ” read x case “$x” in y | yes ) return 0; n | no ) return 1; *) echo “please input yes or no” esacdone#主程序部分echo “original parameters are $*”if yes_or_no “$1”then echo “HI $1,nice name”else echo “never mind”fiexit 0在函数内部定义的变量,在函数运行后,变量依然有效,如果只想在本函数内使用临时变量,可在变量前加上 local#!/bin/bashfoo() local str=aaaa #如果此处无local 则 最后的语句是可以输出aaaa的echo in foo $strfooecho over $str$# 表示参数个数,$1为第一个参数依次类推。($*,$)脚本中无函数的声明,调用某个函数前,该函数需要先被定义,所以函数的定义可以写在脚本的开始。13、一些命令1)break 命令 在控制条件为满足之前,可以跳出 for,while,until循环,后面可带参数值,来表明要跳出的循环层数,但我们不建议这么做。2) :命令冒号(:)命令是一个空命令。偶尔被运用简化逻辑,相当于true。3) continue命令类似C语言中的同名语句。可使for,while,until循环跳到下一次循环继续执行,循环变量取循环列表中的下一个。如 for x in 1 2 3do echo before $x continue 1 echo after $xdone4) .命令默认情况下,shell脚本程序会在一个新创建的环境中执行,所以当脚本对环境变量所做的任何修改都会丢失,而点(.)命令允许执行的脚本程序改变当前的环境。5) echo命令输出一行字符内容并换行,若要使其不换行linux有两种解决方法:echo n “string to output”echo e “string to outputc”(注:-e是确保启用了反斜杠转义字符,c代表去掉换行符,t代表制表符,n代表回车 )6) eval命令eval允许对参数进行求值,如下:foo=10x=fooy=$xecho $y #输出为foo当使用 eval命令时,如下foo=10x=fooeval y=$xecho $y #输出为 107) exec命令将当前shell替换为一个不同的程序如:exec wall “Thanks for the fish”脚本中的这个命令会用wall命令替换当前的shell。第二种用法是修改当前文件描述符:exec 3 /home/sufeng/my_shell/my_tmp_file_$echo press interrupt (ctrl-c) to interrupt .while -f /home/sufeng/my_shell/my_tmp_file_$ ;do echo File exists sleep 1doneecho the file no longer existstrap INTecho creating file /home/sufeng/my_shell/my_tmp_file_$date /home/sufeng/my_shell/my_tmp_file_$echo press interrupt (control-c) to interrupt .while -f /home/sufeng/my_shell/my_tmp_file_$ ;do echo File exists sleep 1doneecho we never get here16)unset命令 unset命令的作用是从环境中删除变量或函数。但不能删除shell本身定义的只读变量。 #!/bin/bashfoo=hello worldecho $foounset fooecho $foo17)find命令find语法结构:find path options tests actionspath 是要搜索的路径。Options 选项:-depth 在查看目录本身之前先搜素目录的内容-follow 跟随符号链接-maxdepths N 最多搜索N层目录-mount(或-xdev) 不搜索其他文件系统中的目录Tests选项:-atime N 文件在N天之前被访问过-mtime N 文件在N天之前被修改过-name “pattern” 按文件名称匹配-newer otherfile 文件比otherfile要新-type c 文件类型为c-user username 文件的拥有者是指定用户。对tests部分的组合:! (-not) 测试取反-a (-and) 两个测试都必须为真-o (-or) 两个测试必须有一个为真 动作:-exec command 执行一条命令-ok command 同上,只是处理时回头提示-print 打印文件名-ls 对当前文件使用命令 ls-dils一个find的示例:sufenglinux-ecmc:/my_shell find ( -name *1.sh -o -atime 2 ) -type f -exec ls -l ;结果如下:-rwxrwxrwx 1 sufeng users 91 Sep 5 18:54 ./bb1.sh-rwxr-r- 1 sufeng users 258 Sep 4 20:41 ./t_fun1.sh-rwxr-r- 1 sufeng users 174 Sep 4 18:11 ./tm_case1.sh-rwxrwxrwx 1 sufeng users 39 Sep 5 18:35 ./cc1.sh-rwxrwxrwx 1 sufeng users 167 Sep 1 11:43 ./tm1.sh18)grep命令grep语法如下:grep options PATTERN FILES选项 含义 -c 输出匹配行的数目,而不是输出匹配行 -i 忽略大小写 -v 对匹配模式取反 -l 只列出匹配行的文件名 -E 启用扩展表达式 -h 取消输出行普通前缀。 示例: grep -c -v in bb.sh cc.sh grep -c in bb.sh cc.sh19)正则表达式 字符 含义 指向一行的开头 $ 指向一行的结尾 . 任意单个字符 方括号包含一个字符范围,其中任何一个字符都可以匹配,如ae,在字符范围前面加,即不在指定范围内。 匹配模式 含义 :alnum: 字母与数字字符 :alpha: 字母 :ascii: ASCII 字符 :blank: 空格或制表符 :cntrl: ASCII控制字符 :digit: 数字 :graph: 非控制、非空格字符 :lower: 小写字母:print: 可打印字符:punct: 标点符号字符:space: 空白字符,包括垂直制表符:upper: 大写字母:xdigit: 十六进制数字选项 含义 ? 匹配是可选的,但最多匹配一次 * 必须匹配0次或多次 + 必须匹配1次或多次 n 必须匹配n次 n, 必须匹配n次或n次以上 n,m 必须匹配n到m之间,包括n和m以上使用的时候需要加.示例:grep e$ bb.sh 以e结尾grep a:blank: bb.sh 以a结尾grep Th.:blank: bb.sh 匹配以Th开头的3个字符组成的单词grep -E a-z10 bb.sh 匹配只有10个字符常的全由小写字母组成的单词。2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桥梁专业知识培训课件
- 2026届河北省巨鹿中学高一化学第一学期期末监测模拟试题含解析
- 2025年机关事务管理面试宝典门诊部岗位面试模拟题及解析
- 2025年徐州市中考生物试题卷(含答案及解析)
- 2025江苏高校大学《辅导员》招聘考试题库及答案
- 2025年初级摄影课程学员面试题
- 2025年度注册验船师资格考试船舶检验法律法规考前冲刺模拟题及答案(网页版)
- 2025年验船师考试(C级船舶检验专业实务)考前模拟试题及答案二
- 北京市门头沟区2024-2025学年八年级上学期第二次月考生物考试题目及答案
- 2025年摄影摄像岗位面试预测题
- 蛇咬伤急救处理流程
- 陕西省特种设备隐患排查清单(2025年)
- 货款转让协议书
- 2025年内蒙古鄂尔多斯一中高考生物倒计时模拟卷含解析
- 2025CACA子宫颈癌诊疗指南解读
- 绿色建筑概论 课件全套 第1-11章 绿色建筑概述-绿色建筑运营与维护
- 2025医务人员手卫生规范
- 医务人员行为规范
- 光伏电站安全培训
- GB/T 35267.4-2025清洗消毒器第4部分:内镜清洗消毒器
- DB45T 1056-2014 土地整治工程 第2部分:质量检验与评定规程
评论
0/150
提交评论