说明环境变量

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Ch2ShellProgrammingJianjianSONGSoftwareInstitute,NanjingUniversitySept.2004Content1.ShellOverviewWhatisShell?WhyShell?2.创建和执行Shell程序3.Shell程序设计的语法变量、条件测试、条件语句、重复语句、命令表和语句块、函数…4.实例1.ShellOverviewShell用户和操作系统之间的接口作为核外程序而存在文件子系统用户硬件控制硬件内核Shell用户用户用户高级语言和实用程序系统调用进程管理子系统进程间通信存储管理调度程序设备驱动程序字符设备块设备高速缓存核外程序Shell:用户和操作系统之间的接口Shell:用户和操作系统之间的接口csh其它程序bashX窗口系统Shell:作为核外程序而存在内核各种不同的Shellshell名称描述位置ash一个小的shell/bin/ashash.static一个不依靠软件库的ash版本/bin/ash.staticbshash的一个符号链接/bin/bshbash“BourneAgainShell”。Linux中的主角,来自GNU项目/bin/bashshbash的一个符号链接/bin/shcshCshell,tcsh的一个符号链接/bin/cshtcsh和csh兼容的shell/bin/tcshkshKornShell/bin/kshShell的双重角色命令解释程序Linux的开机启动过程;进程树Shell的工作步骤打印提示符;得到命令行;解析命令;查找文件;准备参数;执行命令独立的程序设计语言解释器KISS(KeepItSmallandStupid)ReusabletoolsRedirectionandpipeUNIX’sPhilosophy(Examples)RedirectionUse“echo”tocreateafile?PipeGetthecountoffilesinadirectory?Showsubdirectoriesandonlysubdirectories?art/usr/lib/libc.a|grepprintf|pr-4-t(?)2.创建和执行Shell程序编写脚本文件执行脚本文件运行环境编写脚本文件脚本文件注释退出码(exitcode)Example#!/bin/bash#Hereiscommentsforfilein*;doifgrepPOSIX$file;thenmore$filefidoneexit0执行脚本文件方法1:$shscript_file方法2:chmod+xscript_file(chown,chgrpoptionally)./script_file方法3:sourcescript_file,or.script_file用户环境.bash_profile,.bash_logout,.bashrcfiles.bash_profile:用户登录时被读取,其中包含的命令被bash执行.bashrc:启动一个新的shell时读取并执行.bash_logout:登录退出时读取执行Aliasalias/unaliascommand环境变量exportcommandexport,env&setcommand3.Shell程序设计的语法变量条件测试条件语句重复语句命令表和语句块函数其它3.1变量用户变量环境变量参数变量和内部变量用户变量变量的赋值和使用var=valueecho$varread命令REPLYvariable引号的用法双引号,单引号转义符“\”环境变量环境变量说明$HOME当前用户的登陆目录$PATH以冒号分隔的用来搜索命令的目录清单$PS1命令行提示符,通常是”$”字符$PS2辅助提示符,用来提示后续输入,通常是””字符$IFS输入区分隔符。当shell读取输入数据时会把一组字符看成是单词之间的分隔符,通常是空格、制表符、换行符等。参数变量和内部变量环境变量说明$#传递到脚本程序的参数个数$0脚本程序的名字$1,$2,…脚本程序的参数$*一个全体参数组成的清单,它是一个独立的变量,各个参数之间用环境变量IFS中的第一个字符分隔开$@“$*”的一种变体,它不使用IFS环境变量。3.2条件测试退出码test命令testexpression或[expression]test命令支持的条件测试字符串比较算术比较与文件有关的条件测试逻辑操作字符串比较字符串比较结果str1=str2两个字符串相同则结果为真str1!=str2两个字符串不相同则结果为真-zstr字符串为空则结果为真-nstr字符串不为空则结果为真算术比较算术比较结果expr1–eqexpr2两个表达式相等则结果为真expr1–neexpr2两个表达式不等则结果为真expr1–gtexpr2expr1大于expr2则结果为真expr1–geexpr2expr1大于或等于expr2则结果为真expr1–ltexpr2expr1小于expr2则结果为真expr1–leexpr2expr1小于或等于expr2则结果为真与文件有关的条件测试文件条件测试结果-efile文件存在则结果为真-dfile文件是一个子目录则结果为真-ffile文件是一个普通文件则结果为真-sfile文件的长度不为零则结果为真-rfile文件可读则结果为真-wfile文件可写则结果为真-xfile文件可执行则结果为真逻辑操作逻辑操作结果!expr逻辑表达式求反expr1–aexpr2两个逻辑表达式“And”(“与”)expr1–oexpr2两个逻辑表达式“Or”(“或”)3.3条件语句if语句case语句if语句(1)形式if[expression]thenstatementselif[expression]thenstatementselif…elsestatementsfi紧凑形式;(同一行上多个命令的分隔符)if语句(2)例1(.bash_profile文件中)if[-f~/.bashrc];then.~/.bashrcfi例2#!/bin/shecho“Isthismorning?Pleaseansweryesorno.”readanswerif[“$answer”=“yes”];thenecho“Goodmorning”elif[“$answer”=“no”];thenecho“Goodafternoon”elseecho“Sorry,$answernotrecognized.Enteryesorno”exit1fiexit0case语句(1)形式casestrinstr1|str2)statements;;str3|str4)statements;;*)statements;;esaccase语句(2)Example#!/bin/shecho“Isthismorning?Pleaseansweryesorno.”readanswercase“$answer”inyes|y|Yes|YES)echo“Goodmorning!”;;no|n|No|NO)echo“Goodafternoon!”;;*)echo“Sorry,answernotrecognized.”;;esacexit03.4重复语句for语句while语句until语句select语句for语句(1)形式forvarinlistdostatementsdone适用于对一系列字符串循环处理for语句(2)Example#!/bin/shforfilein$(lsf*.sh);dolpr$filedoneexit0while语句(1)形式whileconditiondostatementsdonewhile语句(2)Examplequit=nwhile[“$quit”!=“y”];doreadmenu_choicecase“$menu_choice”ina)do_something;;b)do_anotherthing;;…q|Q)quit=y;;*)echo“Sorry,choicenotrecognized.”;;esacdoneuntil语句形式untilconditiondostatementsdoneNotrecommended(whilestatementispreferred)select语句(1)形式selectiteminitemlistdostatementsdone作用生成菜单列表select语句(2)例(一个简单的菜单选择程序)#!/bin/shclearselectiteminContinueFinishdocase“$item”inContinue);;Finish)break;;*)echo“Wrongchoice!Pleaseselectagain!”;;esacdoneQuestion:用while语句模拟?3.5命令表和语句块命令表命令组合语句块命令表命令组合分号串联command1;command2;…条件组合AND命令表格式:statement1&&statement2&&statement3&&…OR命令表格式:statement1||statement2||statement3||…语句块形式{statement1statement2…}或{statement1;statement2;…;}3.6函数形式func(){statements}局部变量local关键字函数的调用funcpara1para2…返回值return函数的例子(1):定义yesno(){msg=“$1”def=“$2”whiletrue;doecho””$echol“$msg”readanswerif[“$answer”];thenelsereturn$deffidone}case“$answer”iny|Y|yes|YES)return0;;n|N|no|NO)return1;;*)echo“”echo“ERROR:Invalidresponse,expected\”yes\”or\”no\”.”continue;;esac函数的例子(2):使用调用函数yesnoifyesno“Continueinstallation?[n]”1;then:elseexit1fi3.7其它杂项命令break,continue,exit,return,export,set,unset,trap,“:”,“.”,…捕获命令输出算术扩展参数扩展即时文档杂项命令break:从for/while/until循环退出continue:跳到下一个循环继续执行exitn:以退出码”n”退出脚本运行return:函数返回export:将变量导出到shell,使之成为shell的环境变量set:为shell设置参数变量unset:从环境中删除变量或函数trap:指定在收到操作系统信号后执行的动作“:”(冒号命令):空命令“.”(句点命令)或source:在当前shell中执行命令捕获命令输出语法$(command)`command`举例#!/bin/shecho“Thecurrentdirectoryis$PWD”echo“Thecurrentdirectoryis$(pwd)”exit0算术扩展expr命令$((…))扩展#!/bin/shx=0while[“$x”–ne10];doecho$xx=$(($x+1))doneexit0参数扩展问题:批处理1_tmp,2_tmp,…方法#!/bin/shi=0while[“$i”–ne10];dotouch“${i}_tmp”i=$(($i+1))doneexit0参数替换的复杂形式即时文档在shell脚本中

1 / 53
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功