




已阅读5页,还剩110页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AIX Shell脚本简介,主要内容,Shell基础知识 环境和变量 神奇的$ 条件与分支 循环控制 计算,不可显示字符 管道与重定向 命令和进程 常用Shell命令 应用实例 作业与答案,Shell基础知识,Shell基础知识,一、什么是Shell Shell是操作系统与外部最主要的接口 Shell是操作系统最外面的一层 Shell管理你与操作系统之间的交互 Shell基本上是一个命令解释器,Shell基础知识,二、Shell的运行模式 交互式Shell 如:登录,退出,ftp 非交互式Shell 如:从文件中获取输入的脚本,Shell基础知识,三、什么是脚本(scripts) Shell Script是放在文件中的一串Shell和操作系统命令,它们可以被重复使用。本质上,Shell Script是命令行命令简单的组合到一个文件里面。 例如:.profile文件就是一个脚本 在脚本文件中以#开始的行为注释行,Shell基础知识,四、Shell的种类 Bourne Shell 包括sh(Bourne shell、POSIX shell)、ksh(Korn shell)和bash(Bourne Again shell) C Shell 包括csh(C shell)和tcsh(TENEX/TOPS shell),Shell基础知识,四、Shell的种类Bourne Shell 是最初的UNIX shell由 Stephen R. Bourne编写 创立于20世纪70年代中期AT&T贝尔实验室 是一个交互式的命令解释器和命令编程语言 可运行作login shell或其子shell 只有login命令可以调用其作为login shell,Shell基础知识,四、Shell的种类C Shell 由Bill Joy编写 创立于20世纪80年代加利福尼亚大学 C语言风格 增加了命令历史、别名、文件名替换、作业控制等功能,Shell基础知识,四、Shell的种类Korn Shell 由David Korn编写 创立于AT&T的贝尔实验室 结合了所有C shell的交互特性 融入了Bourne shell的语法 增加了数学计算、进程协作、行编辑等功能 符合POSIX标准,Shell基础知识,四、Shell的种类Bourne Again Shell bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。,Shell基础知识,四、Shell的种类POSIX Shell POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh,Shell基础知识,五、各操作系统缺省Shell AIX缺省的是Korn Shell Solaris和FreeBSD缺省的是Bourne Shell HP-UX缺省的是POSIX Shell Linux是Bourne Again Shell,环境和变量,环境和变量,一、什么是变量 变量可以保存一些特定的信息 变量可以定制用户本身的工作环境 shell将所有变量的内容均视为字符串 变量可以参与Shell的所有运算 变量在使用时以“$”来标定,如:$var,$var 思考:什么时候使用$var和$var?,环境和变量,二、变量的分类 本地变量 本地变量在用户shell的生命周期内使用,对其它shell没有任何作用 环境变量 环境变量用于所有用户进程,一般在/etc/profile和$HOME/.profile文件中进行设置,在login时系统自动读取 也可通过命令行直接设置,环境和变量,三、环境变量设置 VARIABLE-NAMEVARIABLE-VALUE export VARIABLE-NAME 例如: myvar=test export myvar 或 myvar=test;export myvar 或 export myvar=test,一行输入多个命令时需要以;分隔,环境和变量,三、环境变量设置 还可以使用set a来指定所有的变量将被输出到环境中,一般只在$HOME/.profile中使用 例: set a PATH=/usr/bin;$HOME/bin EDITOR=vi,环境和变量,三、环境变量显示与清除 显示: echo $VARIABLE-NAME env 显示所有环境变量 清除: unset VARIABLE-NAME,环境和变量,三、环境变量常用环境变量 PATH 查询程序的路径变量 PS1 Shell的主提示符 PS2 Shell的第二提示符 PS3 root用户的提示符 HOME 用户的主目录 EDITOR 缺省的编辑器 PWD 当前路径,环境和变量,三、环境变量常用环境变量 TERM 终端类型 LOGNAME 登录名 IFS shell的缺省域分隔符 上次切换路径时的当前路径 HOSTNAME 主机名称,环境和变量,四、本地变量设置 VARIABLE-NAMEVARIABLE-VALUE 或 $VARIABLE-NAMEVARIABLE-VALUE 两边可以有空格 如果变量值包含空格则需要用引号括起来 ”和的意义不同 例:var=abc,则”$var”和$var的值应分别为何?,环境和变量,四、本地变量设置 var=val 设置变量的值 var+val 如果设置了变量则重新设置其值 var:?val 如果未设置,则显示未定义错误 var?val 如果未设置,则显示系统错误 var:=val 如果未设置变量则设置其值 var:-val 如果设置了则取其值,否则取指定值,环境和变量,四、本地变量显示与清除 显示: echo $VARIABLE-NAME echo “my name is : $name” echo $name $age echo “welcome $name:-Tom” 清除: unset VARIABLE-NAME,环境和变量,四、本地变量只读变量 声明一个变量只读 readonly VARIABLE-NAME 或 readonly VARIABLE-NAME=VALUE 显示所有只读变量 直接在命令行执行readonly命令 如果试图修改一个只读变量则系统会报错,环境和变量,五、思考题 1.如何将变量传递到子shell? 2.子shell中修改了父shell导出的变量是否会影 响该变量在父shell中的值? 3.试图使用一个未声明的变量时是否会出错? 4.如何得知一个变量是否被声明了? 5.自行了解getopts的用法。,神奇的$,神奇的$,一、变量重分类 变量可以分为四类: 环境变量 本地变量 位置变量一般为命令行参数等 特定变量如$、$等,神奇的$,二、位置变量 可以是命令行参数 可以是子shell的参数 可以是shell函数的参数 位置变量可以有任意多个 位置变量用$+数字来引用 位置变量只能用09来引用,?,神奇的$,二、位置变量示例 执行:args.sh one two three four 则$0 $9如下图所示:,神奇的$,二、位置变量如何使用第10个参数 shift可以将所有参数向左移一位 刚才的例子在shift一次后,参数如下所示:,神奇的$,三、特定变量 $# 参数的个数 $* 所有的参数 $ 同$*,使用时加”可以将每个参数以”括起 $ 脚本运行的当前PID $! 后台运行的最后一个进程PID $- 显示shell的当前使用选项,同set $? 脚本的返回码,一般0表示正常,神奇的$,三、特定变量示例 执行:args.sh one two three four 则: $# 为 4 $* 为 one two three four $ 为 one two three four ”$” 为 ”one” ”two” ”three” ”four”,条件与分支,条件与分支,一、问题的起因 判断文件的状态 判断变量间或变量与常量是否相等 判断数字的大小关系 根据不同的条件进行不同的处理 增加程序强壮性的方法,条件与分支,二、测试文件状态 test 测试项 文件路径 测试项 文件路径 ,注意需要在此处 各添加一个空格,-d 目录 -f 文件 -L 符号连接 -r 可读权限,-s 非空文件 -w 可写权限 -u 文件有suid位设置 -x 可执行权限,条件与分支,二、测试文件状态示例 test -r myfile test -s err.log -d $mydir -f $mydir/srs.log ,条件与分支,三、字符串测试 test 字符串 test 测试运算符 字符串 test 字符串 测试运算符 字符串 测试运算符为: = 两个字符串是否相等 != 两个字符串是否不等 -z 是否为空串 -n 是否为非空串,条件与分支,三、字符串测试示例 test ”abc” = ”ABC” -z $EDITOR $PWD != $HOME ”$var1$var2” = ” /chenw/lex.sh” ,条件与分支,四、数值测试 ”数值” 测试运算符 ”数值” -eq 数值相等 -ne 数值不相等 -gt 大于 -lt 小于 -ge 大于或等于 -le 小于或等于 如果测试结果满足则返回0,否则返回1($?),条件与分支,四、数值测试示例 ”$num” -eq ”100” ”101” -ge ”100” ”$num1” ne ”$num2” ,逻辑分支,五、逻辑操作符号 -a 逻辑与 -o 逻辑或 & 逻辑与 | 逻辑或 如: -r err.log -a s err.log -z ”$msg” -o ”$msg” = ” ” ”$num” -ge ”0” & ”$num” -lt ”10” 思考: -r err.log -a s err.log 是否正确?,条件与分支,六、逻辑分支 常见的逻辑分支控制 if then-elif then-else-fi 和 case-esac,条件与分支,六、逻辑分支if if 条件 then 处理指令 else 处理指令 fi,if 条件1 then 处理指令1 elif 条件2 then 处理指令2 fi,注意: if与fi必须配对 else可以没有 elif可以没有 then必须单独一行,条件与分支,六、逻辑分支思考 下面的命令实现了什么功能? -f ”/tmp/err.log” & cat /tmp/err.log -d ”$LOGPATH” | mkdir p $LOGPATH cd $LOGPATH ,条件与分支,六、逻辑分支case case为多选择语句, 可以用case匹配一 个值或一个模式, 如果匹配成功,则 执行相应的命令 思考:;的作用是什么?,case 值 in 模式1) 命令1 ; 模式2) 命令2 ; esac,条件与分支,六、逻辑分支case的单值匹配 case $choice in echo ” one” ; echo ”two ” ; esac,case $choice in start) start.sh ; stop) stop.sh ; esac,case $choice in A) echo ”Alpha” ; *) echo ” error” ; esac,条件与分支,六、逻辑分支case的模式匹配 * 任意字符 ? 任意单个字符 范围内的任意字符 | 逻辑或操作,条件与分支,case $input in a-zA-Z) echo ”小写字母” ; 0-9) echo ”数字” ; *) echo “其它字符” ; esac,case $input in y|Y) echo ”Yes” ; n|N) echo ”No” ; *) echo “输入错误” ; esac,循环控制,循环控制,一、循环的种类 shell中循环的控制有三种: for循环 until循环 while循环 shell中的循环均可以嵌套,循环控制,二、for循环 for循环使用一个变量名遍历一个列表中的所有值,并对每一个值执行相应的操作,语法如下: for 变量 in 列表 do 处理过程 done,循环控制,二、for循环示例 for num in 1 2 3 4 5 do echo ” No.$num” done,numlist= ” 1 2 3 4 5” for num in $numlist do echo ” No.$num” done,循环控制,二、for循环思考1 下面循环的输出结果是什么? for num in ”1 2 3 4 5 ” do echo ” No.$num” done,循环控制,二、for循环思考2 下面循环执行了什么操作? for arg do echo $arg done,循环控制,三、until循环 until执行一系列命令,指导条件为真时停止,测试发生在循环末尾,语法如下: until 条件 do 执行命令 done until循环至少会执行一次!,循环控制,三、until循环示例 until -f /tmp/err.log do sleep 5 done echo ” 出现错误!” | mail admin,循环控制,四、while循环 while循环用于在满足条件时不断执行指定的命令,条件测试在循环前,语法如下: while 条件 do 执行命令 done,循环控制,四、while循环示例 while read LINE do echo $LINE done score.txt 相当于 cat score.txt,while read LINE do echo $LINE echo $LINE s.txt done score.txt 相当于 cat score.txt | tee -a s.txt,循环控制,四、break和continue break 用于跳出当前循环 break n 可以跳出指定层次的循环 continue 用于放弃之后的操作继续循环 break 也可用于跳出case的分支,计算,计算,一、使用let进行数值计算 语法:let 变量=表达式 示例:let a=2*4/3 a=2 b=3 let a=a*b-1 注意:let 运算的结果会强制取整,不四舍五入,计算,二、使用expr进行表达式计算 语法: expr 表达式 示例:count=expr $count + 1 expr 可以使用 + - * / % ( )等运算符 表达式中的每个元素间必须用空格分隔,计算,三、expr 的其它用法 表达式1 | 表达式2 如果表达式1不为空或0则返回表达式1,否 则返回表达式2 表达式1 & 表达式2 如果两个表达式均不为空或0则返回表达式1 否则返回0 表达式1 : 表达式2 用表达式1去匹配表达式2的模式并返回匹配 结果,模式同ed命令,此时非特殊字符, 一般返回匹配字符个数,不匹配返回0 match 字符串1 字符串2 与 表达式1 : 表达式2 相同 length 字符串 返回字符串的长度 index 字符串1 字符串2 返回字符串2在字符串1中第一次出现的位置 substr 字符串 起点 长度 按指定参数截取字符串,计算,三、expr的其它用法示例 expr ” | ”abc” 返回”abc” expr ” & ”abc” 返回0 expr length ”abc” 返回3 expr index ” abcd” ” a” 返回1还是0? expr ” abcd” : ” ab” 返回2 expr substr ” abc” 1 1 返回”a” 思考:expr “abab” : “a” 返回值为多少?,计算,四、另一种计算eval 用法:eval 命令 eval会将传递给它的命令中的所有变量替换为变量的值后,再执行替换完成的命令。 一般用于需要进行两次扫描的变量替换。,计算,四、另一种计算eval示例 假设有两个变量 ABC= ” abc ” A=”ABC” 则: eval echo $A 的结果为: eval echo $”$A” 的结果为: 运算过程 $”$A” $ABC ”abc” 思考1:eval echo $A 的结果是什么? 思考2:三次甚至多次替换是否可行?,ABC abc,计算,四、另一种计算eval示例 假设变量 ABC= ”ls -l ” OUT=”/tmp/out.log” 则 eval $ABC eval $ABC $OUT,相当于执行了ls -l 相当于执行了ls -l并将结果输出到了/tmp/out.log,不可显示字符,不可显示字符,一、什么是不可显示字符 一般为控制字符 一般显示为A-Z,如:A 最常见的不可显示字符为:M 最容易产生不可显示字符的行为是ftp,不可显示字符,二、如何标识或输入不可显示字符 可以用八进制标识不可显示字符: A - 001 B - 002 依次类推 Z - 032 可以用手工方法输入: Ctrl+V+字母键,不可显示字符,三、如何替换掉讨厌的不可显示字符 结合键盘输入不可显示字符的方法在vi中使用全局替换命令进行替换: 1,$s/M/g 利用tr命令进行文本替换: cat badfile ” 015” ”?” goodfile tr -d ” 015” goodfile,管道与重定向,管道与重定向,一、输入和输出 系统定义的输出和输出共有三个: 标准输入 (0) 键盘 标准正常输出(1) 屏幕 标准错误输出(2) 屏幕,管道与重定向,二、读取数据 read用于从输入设备读取数据 例如: read one 输入:a read one two 输入:a b read one two three 输入:a b c d e,管道与重定向,三、显示数据 一般有三类方法显示数据 echo 一般用于直接显示数据或变量值 cat 一般用于显示文件内容 more 一般用于分页显示文件内容 head 显示文件开始的指定行数 tail 显示文件结尾的指定行数 tee 可在显示的同时将其输出到一个文件中,管道与重定向,四、什么是管道 管道可以将一个命令的输出作为其它的输入 管道用 | 来表示 用 命令1 | 命令2 的方式来使用管道 示例: ls | sort ls | tee -a /tmp/filelist.txt,管道与重定向,五、重定向 重定向即改变命令的缺省输入或输出方式,改由文件或其它方式来实现。 在对标准输入(0)和标准输出(1)进行重定向时可不用指定文件描述符,但对标准错误输出(2)进行重定向时必须指定文件描述符。,管道与重定向,五、重定向文件描述符 文件描述符就是用来代表一个文件的数字 文件描述符只能使用数字09 可以通过exec命令来打开或关闭文件描述符 打开:exec numberfilename 关闭:exec number&-,管道与重定向,五、重定向示例 语法: command filename command filename command 1 filename command 1 filename 意义:将标准输出重定向到一个文件 示例: ls /usr/vac filelist.txt ls /etc filelist.txt,管道与重定向,五、重定向示例 语法: command 2 filename command 2 filename 意义:将标准错误输出重定向到一个文件 示例: ls /usr/vac 2 filelist.txt ls /etc 2 filelist.txt ls - 2 /dev/null,管道与重定向,五、重定向示例 语法: command filename command &m 意义:该由从指定文件或文件描述符中读入数据 示例: sort filelist.txt sort &1,管道与重定向,五、重定向示例 语法: command filename 2&1 command filename 2&1 意义:将标准出错和标准输出同时定向到一个 文件中 示例: check_error.sh sys.log 2&1 思考: command 2 filename 2&1 command 2 filename 1&2,管道与重定向,五、重定向示例 语法: command filename2 意义: 将标准输入和标准输出分别定义为不 同的文件 示例: sqlplus output.lst,管道与重定向,五、重定向其它的用法 语法: command delimiter 意义: 从标准输入读取直到遇到分界符 delimiter 示例:sqlplus user/pass endl select * from mytab; exit endl,管道与重定向,五、重定向思考 下面的代码意义是什么? exec 3 do read line echo $line done exec 03&,命令和进程,命令和进程,一、命令 命令是执行操作和运行程序的请求 可以使用whereis来查看命令的存放路径 可以使用man来查看命令的帮助 可以使用whatis来查看命令的帮助 使用whatis前必须先使用catman w来创建 whatis数据库,命令和进程,一、命令使用历史命令 $HOME/.sh_history文件的作用 用vi的方式使用历史命令(ESC、j、k) 查找历史命名(ESC、/) 快速使用历史命令(r) 对查找到的历史命令进行修改(h、l、i、r等),命令和进程,一、命令别名 用法:alias 别名=命令 参数 意义:可以用指定的别名来替代实际的命令 示例:alias lf=”ls -F” alias sql=”sqlplus user/passtns” alias 思考:alias lf=ls -F与alias lf= ls -F和 alias lf=”ls -F”有什么区别?,命令和进程,二、进程 实际运行在计算机上的程序或命令成为进程 进程间存在父子关系 每个进程都有一个唯一的ID,称为:PID 每个进程均使用部分可用的系统资源 进程共享系统的计算机时间 进程存在不同的优先级,命令和进程,三、进程的种类 前台进程:要求用户启动或与之交互的进程 后台进程:独立于用户运行的进程 守护进程:守护进程是无人照管运行的进程,是一种后台进程,且在任何时候均可用,守护进程由root或root shell启动且只能由root停止 僵尸进程:既zombie进程,它是一个死进程,它不再执行但仍在进程列表中可以看到。在其父进程关闭或重新启动系统时才会被清除。,命令和进程,四、管理进程 启动进程:command & 停止进程:Ctrl+C kill 查看进程:ps 切换前后台进程:bg和fg 修改进程的优先级:nice和renice 思考:如何在退出终端后继续执行你的进程? nohup command options &,命令和进程,五、信号 信号是一种软中断 信号提供了一种异步处理的方法 每一种信号都被赋予了一个数字来代表 常用的信号: 1挂起,一般为连接断开 2中断,一般为终端中断 3退出,退出终端产生 6异常终止 9终止程序 17暂停程序,命令和进程,五、信号trap trap提供了在脚本中捕获信号的方法 用法:trap 信号1 信号2 信号n 处理过程 示例: trap 1 2 3 4 5 6 7 8 9 10 login trap 1 2 3 6 9 17 exit trap 1 3 5 7 12 19 myfunction,常用Shell命令,常用Shell命令,一、cut 用于按照指定的分隔符号截取字符串 用法:cut -(b|c|f) -d delimiter 字符串 示例:cut -c1-5 ”ab cd ef gh” cut -f1,3 ”ab cd ef gh” cut -f2 -d: ”ab:cd ef:gh”,常用Shell命令,二、touch 以指定的时间戳或当前时间创建一个空文件 用法:touch tMMDDhhmm 文件名 示例:touch tmpfile touch -t01010101 tmpfile 思考:tmpfile实现了什么作用?,常用Shell命令,三、tar 用于对指定的文件或目录进行打包或解包 最常用的选项: -c 创建一个归档 -x解开一个归档 -v 列出每一个处理的文件 -f 指定归档文件路径 -t 按照文件在归档中的顺序列出文件 示例: tar -cvf mytar.tar /mydir/* tar -xvf mytar.tar tar -tvf mytar.tar,思考1:tar cvf mytar.tar ./* 始终正确么? 思考2:当前目录为/tmp/mydir,目录下面有一个 tar文件mytar.tar, 执行tar xvf mytar.tar后,tar包中的 文件被解开并放到了何处?,常用Shell命令,三、head和tail 用于显示文本文件的前或后指定行或字节 用法:head|tail -c|-n number filename 示例:head -10 scores.txt head -n10 scores.txt tail -c100 scores.txt 特殊用法: tail -f scores.txt,常用Shell命令,四、wc 计算文本文件的字节数、字符数、单词数和行数 用法:wc -c|-m -l -w filename wc -k -c -l -w filename c 字节数,当于k一起用示标识字符数 l 行数,w 单词数 m字符数,不能和k一起用 示例:wc scores.txt,常用Shell命令,五、太简单的不用说了 cd 切换目录 compress 压缩文件 mkdir 创建目录 uncompress 解压缩文件 rm 删除文件或目录 cp 拷贝文件 ls 显示目录内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贷款资金管理办法试行
- 上海+洗车+管理办法
- 业主安全经费管理办法
- 麻药品处方管理办法
- 过节费福利管理办法
- 预付款在消费金融领域的作用与债的担保关系解读
- 贷款债权转让管理办法
- oa系统权限管理办法
- 中国船员证书管理办法
- 专升本转专业管理办法
- 小学科学新教科版二年级上册全册教案(2025秋版)
- 婚内财产协议书2025
- 2025年海南省通信网络技术保障中心招聘考试笔试试题(含答案)
- 2025年国家卫生健康委医药卫生科技发展研究中心招聘考试笔试试题(含答案)
- TSGD7002-2023-压力管道元件型式试验规则
- 中医儿科学 手足口病
- GB/T 17614.1-2015工业过程控制系统用变送器第1部分:性能评定方法
- GB/T 14842-2007铌及铌合金棒材
- 《基层社区治理问题研究开题报告(含提纲)3500字》
- 《食品毒理学》教学PPT课件整套电子讲义
- 新闻学概论ppt全套教学课件
评论
0/150
提交评论