《gnulinux编程课件第4章》由会员分享,可在线阅读,更多相关《gnulinux编程课件第4章(42页珍藏版)》请在金锄头文库上搜索。
1、第4章 Shell程序设计,郑谦益、韩京宇,内容提要,Shell 概述 Shell脚本的定义与执行 Shell变量 输入和输出 Shell中的引号 条件表达式 控制语句 函数,Shell 概述,概念 Shell的概念是源自Unix的命令解释器。Shell不仅可解释用户输入的命令,同时,可解释执行基于命令的脚本语言。 Shell的分类 (1) sh (2) csh (3) ksh (4) bash,Shell脚本,#!/bin/bash # script4-1.sht var1=“welcome to use Shell script“ echo $var1 pwd ls -i,2. Shell
2、脚本的执行方法,(1) 添加可执行权 $ chmod u+x demo.sh # 给demo.sh增加可执行权 $ ./demo.sh # 直接运行 (2) 指定Shell命令 $ bash demo.sh # 指定由bash解释执行,Shell脚本的解析过程,Shell变量,Shell变量的分类 用户自定义变量 2. 环境变量 3. 位置变量 4. 预定义变量,用户自定义变量,语法 变量名=变量值 语义 将“变量值“赋给变量“变量名“。 变量的引用 $变量名 清除变量的内容: unset 变量名 查看变量的值 set,环境变量,环境变量又称全局变量,通常,由系统在启动时设置,环境变量一般用大
3、写字母表示, 输出用户自定义变量为环境变量 语法 export 用户自定义变量 语义 将“用户自定义变量“输出为环境变量。,Linux系统中的环境变量,全局性系统环境变量,环境变量一般定义在系统启动相关的配置文件中 bash shell全局性系统环境变量的资源文件 /etc/rc /etc/bashrc /etc/profile,用户定制的系统环境变量 /.bashrc /.bash_profile,用户定制的系统环境变量,用户1 /.bash_profile /.bashrc,用户2 /.bash_profile /.bashrc,用户3 /.bash_profile /.bashrc,/e
4、tc/profile、/etc/profile.d/*,位置变量,预定义变量,命令替换,语法一 var=$(command) 语法二 var=command 功能 将command命令的运行结果赋给变量var。,输入和输出,read命令 语法 read 选项 变量名列表 功能 从键盘上读取变量的值 echo命令 语法 echo 选项 字符串 功能 显示字符串或变量的值,echo命令选项,echo命令的转义符,实例分析,# 从键盘读取一个字符,不回显 $ read -s -n1 -p “Yes (Y) or not (N)?“ answer # 输入变量var1和var2 $ read var1
5、 var2 # 2行3列显示 $ echo -e “atbtcndtetf“ a b c d e f,Shell中的引号,引号的分类 1. 反引号 反引号用于命令替换 2. 单引号 在一对单引号中的所有字符(包括元字符),保留原有字符的含义,其中不能包含单引号。 3. 双引号 在一对双引号中的字符(包括元字符),除了美元符$、反引号和反斜杠外,其余均保留原来字符的含义。,实例分析,显示字符* $ echo * 不进行变量替换 $ text=* means all files $ echo $text 反斜杠为转义符 $ echo “$dlist“ $dlist 不加双引号与加双引号的比较 $
6、x=* $ echo $x # 显示当前目录下的所有文件 $ echo “$x“ # 仅显示变量x的值*,Shell 控制语句,条件语句 分枝语句 循环语句 函数,使用test命令 语法: 使用括号 语法: 条件表达式的值为真返回零,为假时返回非零值,test 条件表达式, 条件表达式 ,条件测试,文件状态操作符,字符串操作符,数字操作符,逻辑操作符,命令分隔符,条件语句,语法一 if 条件表达式 then 命令序列1 else 命令序列2 fi 语义 当“条件表达式“的测试值为真时,执行“命令序列1“,否则,执行“命令序列2“。命令序列中的命令可以是一个或者多个。,条件语句,语法二 if 条
7、件表达式 ; then 命令序列 fi 语义 当“条件表达式“的测试值为真时,执行“命令序列“,否则,执行条件语句后面的命令。条件表达式与then之间的分号“;“起命令分隔符的作用。,条件语句,语法形式三 if test 条件表达式1 then 命令序列1 elif 条件表达式2 then 命令序列2 . else 命令序列3 fi 语义 这是包含二层嵌套的条件语句,当“条件表达式1“为真时,执行“命令序列1“,否则,在“条件表达式2“为真的情况下,执行“命令序列2“,否则,执行“命令序列3“,“命令序列3“属于第2个条件语句的一部分。,实例分析,#!/bin/bash # script4-2
8、.sh echo “Enter a file name:“ read file if -f $file then echo “File $file exists.“ fi,实例分析,#!/bin/sh # script4-4.sh echo “Enter the first integer:“ read first echo “Enter the second integer:“ read second if “$first“ -gt “$second“ then echo “$first is greater than $second“ elif “$first“ -lt “$second“
9、 then echo “$first is less than $second“ else echo “$first is equal to $second“ fi,case语句,语法 case 变量 in 值1) 命令序列1 ; 值2) 命令序列2 ; 值n) 命令序列n ; esac 语义 当“变量“的值为“值1“时,执行“命令序列1“,当“变量“的值为“值2“时,执行“命令序列2“,依此类推,需注意的是:在每个命令序列后面,需要用“;“作为结束标记。,实例分析,#!/bin/bash # script4-6.sh hour = date +%H case $hour in 01-9 |
10、101 ) echo “Good morining !“ ; 12-7 ) echo “Good afternoon !“ ; * ) echo “Good evening ! “ ; esac,for语句,语法 for 变量名 in 参数列表 do 命令列表 done 语义 将“参数列表“中的元素依次赋给“变量名“,在每次赋值后执行“命令列表“,“参数列表“表示“变量名“的取值范围。,实例分析,#!/bin/bash # script4-8.sh smallest=10000 for i in 12 5 18 58 -3 80 do if test $i -lt $smallest then
11、 smallest=$i fi done echo “ The smallest number is: $smallest“,实例分析,#!/bin/sh # script4-12.sh for i in * do cat $i | pr #输出重定向到打印机 done,while语句,语法 while 条件表达式 do 命令列表 done 语义 循环执行“命令列表“中的命令,直至“条件表达式“的值为假。,实例分析,#!/bin/bash # script4-13.sh i=1 sum=0 while $i -le 100 do sum=expr $sum + $i i=expr $i + 1 done echo The sum is $sum,函数,语法 函数名( ) 命令列表 return 函数的调用方式为: 函数名 参数列表,实例分析,#!/bin/bash # script4-17.sh testfile( ) #函数定义 if -d $1 then echo “$1 is a directory!“ else echo “$1 is not a directory!“ fi return testfile $1 #函数调用,