Bash脚本编程基础.ppt

上传人:豆**** 文档编号:32891432 上传时间:2022-08-09 格式:PPT 页数:53 大小:1.15MB
返回 下载 相关 举报
Bash脚本编程基础.ppt_第1页
第1页 / 共53页
Bash脚本编程基础.ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《Bash脚本编程基础.ppt》由会员分享,可在线阅读,更多相关《Bash脚本编程基础.ppt(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Bash脚本编程基础脚本编程基础课程目标 掌握Bash的类型与配置 掌握Bash基本语法 掌握监控程序的编写 掌握Bash结构化编程内容导航 Bash基础 Bash语法 监控实例Bash基础 Shell与Bash、sh Bash的类型 Bash命令的解释过程 Bash与Vim配置Shell伪终端伪终端SHELLSHELL循环接收循环接收用户输入用户输入解释执行解释执行OSOS硬盘 I/O网络 I/O其它操作用户侧用户侧主机侧主机侧控制台控制台用户用户TermTermKernelKernelBash的类型Login BashInteractive BashBash ScriptsLogin Ba

2、sh 什么是 Login Bash Login 时 Bash做了什么全局配置 /etc/profile个人配置/.bash_profile/.bash_login/.profile咦, 好像没提到/etc/profile.d/ ?SUSE: 确保文件可读SLK: 确保文件可读可执行Login sh login sh和login bash是一样的吗?Login sh只读取:/etc/profile/.profile查看: ps; /etc/passwd指定: useradd -s /bin/bash修改:usermod, chshInteractive Bash 什么是交互式Bash 启动交互式

3、Bash时,Bash做了什么/etc/bash.bashrc/.bashrcsource 为了统一管理,在login 的时候自动执行 /.bashrctest -r $HOME/.bashrc & source $HOME/.bashrc更详细资料见 man bash: INVOCATIONBash脚本常见问题: #! /bin/bash 的位置 来自windows的CRLF的换行符 脚本的权限位 Bash的退出码Bash脚本的执行 父shell Fork一sub-shell Sub-shell继承父shell环境 Sub-shell调用指定的解释器解释执行该脚本 Sub-shell退出, 相

4、关环境被销毁 父shell取得sub-shell的退出状态1、brace expansion(花括号扩展)2、tilde expansion(波浪线扩展)3、parameter,variable expansion(变量扩展)4、arithmetic expansion(算术扩展)5、command substitution(命令替换)6、word splitting(词的拆分)7、pathname expansion(路径名扩展)可扩展成用户的$HOME值cd echo samlivar=samli将带$的变量名扩展成变量值var=”xzy”echo $var整数算术运算( i+ )( 10

5、 = 5 )( sum = i + j )Sum=$( I + j )echo 1.10mkdir /data1,2,3,4a=/a/b/cecho $a%/* $a#*/变量值按空白符、换行拆分, 如var=”a b c”for v in $var; do echo $vdone取得命令的输出:Today=$( date +%F )Line=$( grep xxx yyy )通配符扩展成文件名rm *.bakls ?.bakiso=$( ls xXpP.iso )hdd=$( ls /dev/sda1-9*)Bash命令的解析过程Bash脚本与Vim配置 /etc/vimrc 或 /.vim

6、rc中配置syntax on 语法高亮set number 显示行数set shiftwidth=4 四格缩进set tabstop=4 四格缩进set expandtab tab转spaceset bg=light 背景为亮色color murphy 配色方案内容导航 Bash基础 Bash语法 监控实例 变量 数值运算 流程控制 函数Bash语法变量 变量定义:name=value 变量引用:$name注意: =号两边不允许空格 $name是$name的简写变量 命令替换 command $( command ) # 推荐例files=$( ls *.bak )today=$( date

7、+%F )lines=$( cat file )常用变量$?上个命令的退出状态$!最后一个后台进程的pid$0当前脚本的名字$当前脚本的pid$nn为1,2.n, 脚本或函数的参数$脚本或函数的所有参数$#脚本或函数的参数个数$UID当前用户的uid$LOGNAME当前用户名$HOSTNAME主机名$RANDOM1-32767间的随机数$SECONDS已经消耗的秒数$PWD当前的工作目录$OLDPWD最后一次cd前的工作目录$HISTTIMEFORMAT ?环境变量 环境变量是Bash或用户预设置的变量,可被继承并直接使用 有些环境变量会影响shell的行为$PATH命令搜索路径名$LANGl

8、ocale$LC_ALLlocale$TERM终端类型,一般为xterm$EDITOR系统默认编辑器环境变量的设置 export name=value; bash foobar.sh name=value ./foobar.sh 更多信息请 man env 更多变量见 man bash: Shell Variables问题在哪设置JAVA_HOME,让所有用户皆可使用按上面的设置后,rc.local中 执行以下命令可否成功 /usr/local/apache-tomcat/bin/start.sh环境变量要注意的 变量需要export才能被子进程看到(成为环境变量) 大部分的环境变量在logi

9、n时被设置 要注意locale对程序输入输出的影响数值运算 运算工具 let, expr ( ) bc 常用运算 + - * / % (加,减,乘,除,取模) 更详细内容:man bash: ARITHMETIC EVALUATIONi=10; j=20; ( i+ )( cnt = i + j ) cnt=$( i + j )管道与here docbc支持浮点数运算但bc是交互式的, 怎么办?bc EOF# EOF称为占位符scale = 3# 输入的内容10 / 3EOFecho scale = 3; 10 / 3 | bc流程控制 条件判断 if case 循环 for, while b

10、reak, continueif . then if . 语句用于判断一个/一组命令是执行否成功 表达式,测试字符串,文件 ( )表达式,测试数值计算结果 bash命令,测试命令是否执行成功 命令的退出码( $? )为0时,代表true字符串测试测试测试意义意义 -n $str $str 不为空值 -z $str $str 为空值 $str1 = $str2 相等 $str1 != $str2 不等文件测试 更详细内容 man bash CONDITIONAL EXPRESSIONS用法意义用法意义 -b $file 块设备 -r $file 文件可读 -c $file 字符设备 -s $fi

11、le 文件大小不为零 -d $file 目录 -w $file 文件可写 -e $file 文件存在 -x $file 文件可执行 -f $file 普通文件 -p $file 命名管道if . else .if expression; then elif expression; then else fi判断OSif -f /etc/SuSE-release ; thenecho SUSE OSelif -f /etc/slackware-version ; then echo Slackware OSelseecho “Redhat ?”fi命令的退出状态 检查 $? 的值是否为0, 0为真

12、,非0为假grep -wq admin /etc/passwd if ( $? = 0 ); then echo “found”else echo “not found”fiif grep -wq admin /etc/passwdthen echo “found”else echo “not found”ficase# 语法case $var incondition1) Statments1 ;condition2) statments2 ;*) default statments;esacread answercase $answer inyes)echo yes ;no)echo no

13、;*)echo unknown ;esaccase中的字符匹配 * 匹配零个或多个任意字符 ?匹配一个任意字符 字符组,可以匹配组中的一个字符 |A|B, A或者Bcase中的字符匹配case $answer inYyEeSs)echo Answer is yes;NnOo)echo Answer is no;*)echo unknown;esaccase $answer inyes|y)echo Answer is yes;no|n)echo Answer is no;*)echo unknown;esacwhile循环形式1while expression; do statmentsdon

14、e 形式2until expression; do statementsdone #examplei=1sum=0while ( i = 100 ); do( sum += i ) ( i+ )doneecho sum: $sum统计行数#! /bin/bashfile=$0 # 脚本本身Cnt=0# 行数cat $file | while read; do # 关键 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 会是我们期望的结果吗#! /bin/bashfile=$0 # 脚本本身Cnt=0# 行数cat $file | while

15、read; do # 关键 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 会是我们期望的结果吗#! /bin/bashfile=$0 # 脚本本身Cnt=0# 行数cat $file | while read; do # 关键 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 会是我们期望的结果吗#! /bin/bashfile=$0cnt=0while read; do ( cnt + ) echo -e $cnt:t$REPLYdone fileecho xxx 1 fileread

16、 line log.err some_com /dev/null 2&1 some_com & /dev/null块重定向-1if $error ; then echo “error: $error” “$log”else echo “ok” “$log”fiif $error ; then echo “error: $error”else echo “ok”fi “$log”#! /bin/bashfile=$0cnt=0while read; do ( cnt + ) echo -e $cnt:t$REPLYdone $file.log块重定向-2 echo message 1 “$log

17、” echo message 2 “$log” echo message 3 “$log” echo message 1 echo message 2 echo message 3 “$log”( echo message 1 echo message 2 echo message 3 ) “$log”函数 调用: 需要先定义后调用。名字参数 参数: $1, $2 . $#, $ 返回值: 标准输出 退出状态: return $num;或最后一个命令的退出状态 注意 函数必须先定义,后使用函数# definefunc_name() local可指定局部变量# exampleadd() loca

18、l sum ( sum = $1 + $2 ) echo $sumcnt=$( add 10 20 ) 判断OS# V1is_suseos() if -f /etc/SuSE-release then return 0 else return 1 fi# V2is_suseos() -f /etc/SuSE-release 最后一个命令的$?# 调用if is_suseos; thenecho “SUSE OS”elseecho “Slackware ?”fi关于函数的建议 函数名要具可读性,从名字即能看出功能 函数尽量精练,只完成单一功能 尽量使用局部变量 ( local val ) 尽量在

19、$?中返回失败/成功 调用函数时要检查成功与否 一般不需要编写main()内容导航 Bash基础 Bash语法 监控实例监控实例 进程监控 crontab调度 独立运行,周期性检查 例: cron_mon.sh, 一个脚本的成长过程关于脚本的建议 代码应分三部分:变量,函数,主程序 给变量和函数起一些有意义的名字,适当注释 变量多时,可独立成配置文件 特定功能,用函数实现 函数多时,可独立成函数库 酌情记录日志 严重错误时要告警关于脚本的建议 运行前, bash -n 检查语法 用bash -x 观察、调试程序内容导航 Bash基础 Bash语法 监控实例推荐书目 经典资料 abs-guide 推荐 unix shell范例精解 Sed与awk 精通正则表达式 man-pages 关于编程风格 Perl最佳实践 Perl Style Guide 文章Q & AThanks!欢迎访问Bash K吧

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 企业培训

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁