




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux下shell编程简介,王 伦,内容安排,基础介绍 命令简介 变量与参数 管道与重定向 条件判断 循环控制 函数 正则表达式,什么是shell,为了屏蔽内核内部的复杂性,并且为了保护内核。所以在内核的周围建立一个壳(shell),shell解释并执行用户输入的命令,实现用户于内核之间的交互。 shell脚本的本质是将命令的组合,以完成更复杂的任务。 常见的shell种类有:Bourne Shell (sh)、korn Shell(ksh)、 C Shell(csh)、Bourne Again Shell(bash). 查看使用的shell的种类 $echo $SHELL,shell是一
2、个具有特殊功能的程序,它是用户与linux/unix系统核心(kernel)之间的接口,shell的职责,管道连接,编程语言解释,变量和文件名替换,I/O重定向,环境控制,执行命令,shell,怎样编写shell程序,常用使用vi编辑器编写shell程序,最后文件以.sh作为后缀名保存,表示是shell脚本文件。 在终端使用 bash命令运行脚本。或者修改脚本权限使它具有可执行权限。然后直接运行脚本 shell本身也是一种解释型的语言,shell分析脚本中的每条语句然后解释执行它。shell程序设计语言也据具有其他高级程序设计语言的特性。它有循环结构,分支判断语句,变量、函数的等。并且它是面向
3、过程的程序设计语言。,文件和目录,新建文件 touch fileName vim fileName filename 或 fileName 新建文件 mkdir directorName 删除文件或目录 rm 选项 fileName/directorName 选项: -i 系统提示是否要删除文件 -r 递归删除目录里的所有文件 rmdir directorName (必须为空目录) 显示文件内容: cat filename 显示所有的文件内容 more filename 分屏显示 less filename 分屏显示,文件/目录操作,拷贝文件/目录 cp 选项 sourcefile destf
4、ile 修改文件/目录名 mv old_filename new_filename 列出文件/目录清单 ls 【选项】 选项:-l 列出文件的详细信息 例如:-rw-r-r- 1 wanglun wanglun 13819 2010-08-02 15:10 download.php 文件/目录类型以及权限 ls -l 结果每行的前10位用来描述文件的类型和权限,其中前一位用来表示文件的类型,后9位分为三组,分别表示用户,所在组,其他用户的读、写和可执行权限。,权限管理,文件类型如下所示:,文件权限如下表所示,u:(user)文件的属主 ; g(group)文件数组所在的组; o(other)其
5、他用户; a(all)以上三种情况,修改文件访问权限 chmod u/g/o/a +/-/= 权限 FileName/DirecName 其中:+:增加指定的权限 -:去掉指定的权限 =:清除所选的权限并将其设置为制定的权限 chmod允许使用八进制符号作为模式,改变权限。 chmod PermissionCode FileName/DirecName 例如:chmod 765 abc.sh 那么修改后文件的访问权限为: 属主:7 = 4(r) + 2(w) + 1(x),具有读、写、执行权限 所在组:6 = 4(r) + 2(w),具有读、写权限 其他用户:4 = 4(r) ,只具有读权限
6、改变文件/目录的属主(change owner) chown Owner FileName/DirectorName 如:chown wanglun hello.c 改变文件/目录的属组(change group) chgrp Group FileName/DirectorName 如:chgrp wanglun hello.c 改变文件/目录的属主和属组 chown owner:group FileName/DirectorName 如:chown wanglun:wanglun hello.c,本地变量:用户自定义的变量。 环境变量:用于所有用户变量,用于用户进程前,必须用export命令
7、导出。 位置变量:$0(脚本名),$1-$9:脚本参数。 特殊变量:脚本运行时的一些相关信息。,变量,区别$和$*:这两个除了在加双引号使用是不同,其他情况都是相同的。加双引号时,$*把所有的位置参数看作是一个参数,包括分隔符等,$还是生成一串参数,每个位置参数仍然是一个单独的参数 了解shift 和 set Shift :左移命令行参数,向左移动时,第一个参数($1)被丢弃,第二个参数($2)变成第一个参数($1),第三个参数($3)变成第二个参数($2),以此类推。而且,参数个数($#)也会减少一个 set : 初始化命令行参数 ,set命令把set后面的几个参数赋值给命令行参数 例如:
8、在一个脚本中 set cat a is it ;echo $4 $3 $2 $1 得到的结果为:it is a cat 单独使用set命令:返回当前环境下所有的定义的变量 set +/-o:开启或关闭shell特性 如:set -o noclobber 关闭文件覆盖特性 set +o noclobber 打开文件覆盖特性,变量,使用$变量名进行变量替换 如下: $ a=ls $ b=la $ c=/home/wanglun $ $a -$b $c,注意:shell 会依据 IFS 将 命令行上 所输入的文字给拆解为字段。然后再针对特殊字符(meta)先作处理,最后再重组整行command li
9、ne 。,echo $a -$b $c 结果会是什么昵?,变量,当执行一个shell脚本的时候,其实是产生一个子shell进程,由子shell再去执行脚本中的命令。 export 将变量导出为环境变量;环境变量只会影响子shell,不会影响父shell。 source 就是让 shell 脚本在当前 shell 内执行、而不是产生一个 子shell 来执行,因此脚本中对变量的改变就会影响到当前的shell。 利用这个source命令。我们就可以实现,在一个脚本A中写一些function,然后在另外的一个文件中source A ,然后就直接调用这些函数,这个功能将在函数一节中讲到。 exec 在
10、新shell进程中执行脚本,而父shell进程将会被终止 例如,有如下脚本test.sh: #!/bin/bash # 分别用bash ./test.sh source ./test.sh echo $ #和exec ./test.sh 运行,查看结果,变量篇,shell中的3中引号 双引号 用双引号将文本括起来可以阻止shell对大多数特殊字符进行解释。例如#在双引号中括号并不是注释的开头,它只是表示一个普通的符号#。还有 、 、 = 、;、 echo “ $a ”,引号在awk中的作用: awk print $0 1.txt A=0 awk print $A 1.txt awk print
11、 $A 1.txt awk print $A 1.txt awk print $A 1.txt,管道与重定向,重定向:改变shell标准输入来源和标准输出的去向 改变输入数据的来源(stdin),使之从指定的文件读入数据 改变输出数据的去处(stdout,stderr),使数据以追加方式输出到指定文件 例如: 1、 cat hello.c 1 right _log 2 error_log 将标注输出重定向到 right_log中 ,将标准错误输出重定向到 error _log中 2、cat hello.c 1/dev/null 2 then 命令 elif test-command; then
12、 命令 else 命令 fi,控制结构-case,格式 case 变量 in 模式) 命令 ; 模式2) 命令 ; . 模式n) 命令 ; esac,case中的模式(pattern)可以匹配的类型如下:,控制结构-for/while/until,格式1 for 变量 in 列表 do 命令 done,格式2 for 变量 do 命令 done 这里的变量的取值依次为命令行的各个参数,for语句,while语句,格式 while 条件 do 命令 done,until语句 格式 until 条件 do 命令 done 直到条件成立才停止执行命令,函数,格式 function 函数名 () 命令
13、 function 可选 所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分,直至shell解释 器首次发现它,才可以使用。 调用函数仅使用其函数名即可,要传给函数的参数跟在函数后面,参数的使用方法和命令 行参数使用相同 函数里面可以定义变量。 函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中,文 件也必须以#!/bin/sh开头。在使用函数的文件中使用source 将函数导入 函数也可以使用return返回一个返回值,() $() $() $,()与 都是用来构成一个命令组,将多个命令集中处理 如:(命令1 ;命令2;命令3; .) 区别:()将命令组置于子s
14、hell中执行 将命令组置于同一个shell中完成 见例子:shell/func_1.sh $() 与反引号引号都用来做命令替换,但是的通用性比较好。在全部的unix shell中都可以使用,如:$ var=echo hello $用来做变量替换 如:$var 等价于 $var; 也可以用来做字符串的的删除、提取与替换 $()用来做整数的运算 如:$ a=2;b=4;c=5;echo $(a+b*c),字符串中字串的删除、提取与替换$,shell中可以使用$实现字符串的删除、提取与替换 字串的删除 shell提供了一些操作符,可以从字符串中删除满足条件的字串。,操作符的语法形式: $变量名操作符模式 下面我们以变量str=/home/guest/shell/hello.sh为例; $str#/*/ 返回 guest/shell/hello.sh $str # /*/ 返回 hello.sh $str% /*h 返回 /home/guest/shell $str%/*h 返回 空串,子串提取 格式:$变量名:m:n 提取从m开始的n个字符 例如:$str:0:5 返回/home 子符串替换 格式1:$变量名/原子串/新子串 替换第一个原字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025【合同范本】简易租房合同协议书
- 2025房地产代理销售合同范本
- 合伙人退出合作协议书
- 停车场绿化工程合同标准文本
- 二零二五股票与股权分配协议
- 2025年粮食、棉花、化肥等农产品仓储服务项目合作计划书
- 办理协议离婚经过的程序
- 业务员协议书
- 聘用主播的合同范例
- 房地产销售代理合同样本
- XX学校推广应用“国家中小学智慧教育平台”工作实施方案
- 非遗文化创意产品设计 课件全套 第1-5章 概述- 非遗文创产品设计案例解析
- 法律尽职调查所需资料清单
- 幼儿园中班安全教育活动《紧急电话的用途》
- 118种元素原子结构示意图
- 英语四线三格Word版
- 幼儿园行政工作制度
- 广州新华学院
- 部编版七年级下册道法期中试卷1
- 知识图谱-课件
- 百年战争简史
评论
0/150
提交评论