计算机导论第9章Shell编程.ppt_第1页
计算机导论第9章Shell编程.ppt_第2页
计算机导论第9章Shell编程.ppt_第3页
计算机导论第9章Shell编程.ppt_第4页
计算机导论第9章Shell编程.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章 shell程序设计 9.1 shell 概 述 命令解释程序 高级程序设计语言 第一个bash程序 n#!/bin/bash # 这个程序将打印“Hello World”到屏幕上 echo “Hello World“ n$ chmod u+x ./hello.sh n$ ./hello.sh 更有用的程序 n$ mkdir trash $ mv * trash $ rm -rf trash $ mkdir trash n#!/bin/bash mkdir trash mv * trash rm -rf trash mkdir trash echo “Deleted all files!“ 注释 n以“#”开头 n第一行(“#!/bin/bash”)除外 9.2 shell 变 量 n所有变量的取值都是一个字符串 n可以现定义、现赋值 n例子: #!/bin/bash x=12 echo “The value of variable x is $x“ 使用shell变量 nshell变量的变量名是以字母或下划线开 头的字母、数字和下划线的字符序列,字 母区分大小写。 n定义变量并赋值的一般形式是: 变量名=变量值 n用$var的形式来引用名为var的变量的值 两种shell变量 n环境变量:永久性变量,其值不会随 shell程序执行结束而消失。 n本地变量:在shell程序内部定义的,其 使用范围仅限于定义它的程序,出了程序 就不能再用 使用shell变量(深入) n设置一个变量只读: readonly 变量名 n将一局部变量提供给shell执行的其他命 令使用: export 变量名 9.3 控 制 性 结 构 nif语句 nwhile语句 nuntil语句 nfor语句 ncase语句 9.3.1 if语句 n基本格式是: if 命令 then 命令组1 else 命令组2 fi 例子 n#!/bin/bash if test -f /etc/foo then # 文件存在,则拷贝文件然后打印出一个信息 cp /etc/foo . echo “Done.“ else # 文件不存在,则打印出一个信息然后离开 echo “This file does not exist.“ exit fi test命令 n-d检查此file是否是一个目录 -e检查此file是否存在 -f检查此file是否为一般的文件 -g检查此file是否有SGID权限 -r检查此file是否可以读取 -s检查此file大小是否不为0 -u检查此file是否有SUID权限 -w 检查此file是否可以写入 -x检查此file是否可以执行 test的另外写法 nif test -f /etc/foo then nif -f /etc/foo ; then 9.3.2 while语句 n语法格式 while 命令 do 命令组 done 例子 n#!/bin/bash while true; do # while :; do echo “Press CTRL-C to quit.” done n#!/bin/bash x=0;# 设定 x 初值为 0 while “$x“ -le 10 ; do echo “Current value of x: $x“ # 增加 x 的数值: x=$(expr $x + 1) sleep 1 done 检查条件 n检查在数值之间的比较: x -eq y检查x和y是否相等 x -ne y检查x和y是否不相等 x -gt y检查x是否大于y x -lt y检查x是否小于y n检查在字符串之间的比较: x = y检查x与y是否相同 x != y检查x与y是否不相同 -n x若x不是空字符串(null)则为真 -z x若x是空字符串(null) 则为真 9.3.3 until语句 n命令格式 until 命令 do 命令组 done 例子 n#!/bin/bash x=0 until “$x“ -ge 10 ; do echo “Current value of x: $x“ x=$(expr $x + 1) sleep 1 done 9.3.4 for语句 nfor语句的结构是: for 变量 in 参数1 参数2 参数n do 命令组 done 例子 n#!/bin/bash echo -n “Checking system for errors” for dots in 1 2 3 4 5 6 7 8 9 10; do echo -n “.” echo “System clean.” done n#!/bin/bash for x in paper pencil pen; do echo “The value of variable x is: $x” sleep 1 done 更实用的例子 n要求:给当前目录里的所有文件加后缀名 “ .html” #!/bin/bash for file in *; do echo “Adding .html extension to $file.” mv $file $file.html sleep 1 done 9.3.5 case语句 n语法格式: case 变量 in 模式 1) 命令组1; 模式 2) 命令组2; 模式 n) 命令组n nesac 例子 n#!/bin/bash x=5 # 设定 x 初值为5 # 现在检查 x 的数值: case $x in 0) echo “Value of x is 0.” ; 5) echo “Value of x is 5.” ; 9) echo “Value of x is 9.” ; *) echo “Unrecognized value.” esac 9.4 引 号 n双引号(double quote) ” n单引号(forward quote) n反单引号(back quote) 双引号 n$ mkdir hello world $ mkdir “hello world” 单引号 n例: #!/bin/bash x=5 # 设定 x 初值为 5 # 使用双引号 echo “Using double quotes, the value of x is: $x” # 使用单引号 echo Using forward quotes, the value of x is: $x 反单引号 n例: x=$(expr $x + 1) x=expr $x + 1 9.5 算 术 运 算 nexpr命令 n$(.) n例子: #!/bin/bash x=8# 设定x初值为8 y=4# 设定y初值为4 # 现在我们将x和y的总合之值设定到z: z=$($x + $y) echo “The sum of $x + $y is $z” 其它运算 n 运 算 运算符 Addition /加 + Subtraction / 减- Multiplication / 乘* Division / 除 / Modulus / 取余% 9.6 读取使用者输入 nread命令 n例子: #!/bin/bash # 取得到使用者的名字,打印出问候语 echo -n “Enter your name:” read user_name echo “Hello $user_name!” 9.7 函 数 n#!/bin/bash # 函数 hello() 只是打印出一个信息 hello() echo “You are in function hello()” echo “Calling function hello().” # 调用 hello() 函数: hello echo “You are now out of function hello()” 9.8 TRAPPING ntrap使用下列的语法: trap action signal n信号量 1)SIGHUP 2)SIGINT (ctrl+c) 3)SIGQUIT (Ctrl+) 9)SIGKILL(kill) 15) SIGTERM(shutdown) Signal Value Action Comment - SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGQUIT 3 Core Quit from keyboard SIGILL 4 Core Illegal Instruction SIGABRT 6 Core Abort signal from abort(3) SIGFPE 8 Core Floating point exception SIGKILL 9 Term Kill signal SIGSEGV 11 Core Invalid memory reference SIGPIPE 13 Term Broken pipe: write to pipe with no readers SIGALRM 14 Term Timer signal from alarm(2) SIGTERM 15 Term Termination signal SIGUSR1 30,10,16 Term User-defined signal 1 SIGUSR2 31,12,17 Term User-defined signal 2 SIGCHLD 20,17,18 Ign Child stopped or terminated SIGCONT 19,18,25 Cont Continue if stopped SIGSTOP 17,19,23 Stop Stop process SIGTSTP 18,20,24 Stop Stop typed at tty SIGTTIN 21,21,26 Stop tty input for background process SIGTTOU 22,22,27 Stop tty output for background process 例子 n#!/bin/bash # 使用trap命令 # trap CTRL-C执行sorry()函数: trap sorry INT # 函数sorry()打印出一个信息 sorry() echo “Im sorry Sir. I cant do that.” sleep 3 # 从 10 数到 1: for i in 10 9 8 7 6 5 4 3 2 1; do echo “$i seconds until system failure.” sleep 1 done echo “System failure.” 9.9 AND then echo “Both conditions are true.” else echo “The conditions are not true.” fi 9.10 使 用 参 数 n$0 $9 $# n#!/bin/bash # 打印第一个参数 # 首先检查是否有一个参数: if “$#” -ne 1 ; then echo “usage: $0” fi echo “The argument is $1” 环境参数变量 n位置参数变量 位置变量的数目有可以任意多,但只有$0 - $9可以被访问 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ($0的值为脚本名 ) echo Did You See The Full Moon n特定参数变量(7个) $# 传递到脚本的参数的个数 $* 以一个单字符串显示所有向脚本传递的参数。 $ 脚本运行的当前进程ID号 $! 最后一个后台运行的进程的进程ID号 $ 与$#相同,但是使用时加引号,并在引号中返回每个 参数(返回一个参数列表) $- 显示shell使用的当前选项,与set命令功能相同 $? 显示前面最后一个命令的退出状态。0表示没有错误, 其他任何值表明有错误。 9.11 临 时 文 件 n“ $”符号 n$ touch hello.$ 9.12 返 回 值 n$? 变量 n例子 #!/bin/bash # grep 使用者 foobar,并用导引所有输出到/dev/null: grep “foobar” /dev/null 2 then echo “Match found.” exit else echo “No match found.” fi 用户程序返回值的例子 n例: #!/bin/bash if -f “/etc/passwd” ; then echo “Password file exists.” exit 0 else echo “No such file.” exit 1 fi 函数返回值的例子 check_passwd() # 检查是否passwd文件存在: if -f “/etc/passwd” ; then echo “Password file exists.” # 有找到,传回一个0值: return 0 else # 找不到,传回一个1值: echo “No such file.” return 1 fi # # 从函数从函数check_passwdcheck_passwd取得返回取得返回 值:值: foofoo= =check_passwdcheck_passwd # # 检查数值:检查数值: if “$if “$foofoo” -” -eqeq 0 ; then 0 ; then echo “File exists.”echo “File exists.” exit 0exit 0 elseelse echo “No such file.”echo “No such file.” exit 1exit 1 fi fi 完整例子 锁终端 n#bin/bash n#lock it n#trap signals 2,3 and 15

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论