Shell脚本基础
2
Shell图示 Shell图示
3
概述
Shell脚本 Shell脚本 如果你有一系列经常使用的Linux命令, Linux命令 如果你有一系列经常使用的Linux命令,你可 以把它们存储在一个文件中。Shell可以读取 以把它们存储在一个文件中。Shell可以读取 这个文件并执行其中的命令。 这个文件并执行其中的命令。这样的文件被称 为脚本文件 执行shell shell脚本 执行shell脚本 要创建一个shell脚本, shell脚本 要创建一个shell脚本,你要使用任何编辑器 比如vi vi在文本文件中编写它 比如vi在文本文件中编写它 为了使用bash shell来执行脚本magic,其命令 来执行脚本magic, 为了使用bash shell来执行脚本magic,其命令 是: $ bash magic 或 $ ./magic 为终端提示符(普通用户) $ 为终端提示符(普通用户)
本地和全局 Shell 变量(续) 12 变量(
环境变量( 环境变量(续) PS2变量 PS2变量 是为第二个提示符设置值的环境变量 LOGNAME变量 LOGNAME变量 包含用户的注册名字 $ echo “${LOGNAME}” SHLVL变量 SHLVL变量 该变量包含你当前工作的shell 该变量包含你当前工作的shell level
条件执行
test 和 [] 命令 求值表达式,并返回true (0)或 求值表达式,并返回true (0)或 false if构造 if构造 shell提供了循环和判定的构造 提供了循环和判定的构造, Linux shell提供了循环和判定的构造,可以 shell脚本中使用 在shell脚本中使用 算术测试 结合if构造, if构造 结合if构造,它可用于测试变量的数字值
22
case…esac 构造
shell脚本中使用的这个构造依据变量的 shell脚本中使用的这个构造依据变量的 值而执行一组特定指令
23
当变量的值和其中一个指定的值相匹配时, 当变量的值和其中一个指定的值相匹配时, 就执行写在该值下的一组命令
Example3
#!/bin/bash echo " List of Services Offered by Diaz Telecommunications " echo " 1) Global Roam" echo " 2) V-mail" Vecho " 3) Mail on Move" echo " 4) Caller-ID" Callerecho " 5) Dial a Pizza" echo –n "Select the service for which you need more information [1-5] : " [1read choice case $choice in 1) echo "You just need one cell-phone number wherever you travel across cellthe world." ;; 2) echo "You can record your messages when you are not able to take a call.";; 3) echo "You can receive e-mail messages on your cell-phone.";; ecell4) echo "You can display the callers telephone number on your handset screen whenever you receive a call so that you know who's calling.";; 5) echo "You can order for pizza from your cell-phone.";; cell*) echo "You have selected an invalid option.";; esac
17
条件执行( 条件执行(续)
串测试 test命令也可用于字符串 test命令也可用于字符串 文件测试 test命令也可用于检查文件的状态 test命令也可用于检查文件的状态 exit命令 exit命令 用于终止shell脚本的执行并返回到$ shell脚本的执行并返回到 用于终止shell脚本的执行并返回到$提示符 下
=:等于则为真 !=: !=:不相等则为真 -z字符串:字符串长度为零则为真 字符串: -n字符串:字符串长度不为零则为真 字符串:
20
test测试命令 test测试命令3 测试命令3
文件测试
-e文件名:如果文件存在则为真 文件名: 文件名: -r文件名:如果文件存在且可读则为真 文件名: -w文件名:如果文件存在且可写则为真 文件名: -x文件名:如果文件存在且可执行则为真 文件名: -s文件名:如果文件存在且至少有一个字符则为真 文件名: -d文件名:如果文件存在且为目录则为真 文件名: -f文件名:如果文件存在且为普通文件则为真 -c文件名:如果文件存在且为字符型特殊文件则为真 文件名: 文件名: -b文件名:如果文件存在且为块特殊文件则为真 -a 并且 –o 或者 ! 非
9
本地和全局 Shell 变量(续) 变量(
环境变量( 环境变量(续) 一些环境变量的例子是HOME, 一些环境变量的例子是HOME, PATH, PS1, PS2, LOGNAME, SHLVL, 及SHELL HOME变量 HOME变量 Linux系统中的每个用户都有一个相关的称 Linux系统中的每个用户都有一个相关的称 HOME的目录 作HOME的目录 当一个用户登录后,进入相应的HOME HOME的目录 当一个用户登录后,进入相应的HOME的目录 $ echo $HOME
15
Example1
编写一个shell脚本用于计算呼叫中心未应答的询问的数量。 编写一个shell脚本用于计算呼叫中心未应答的询问的数量。该脚本 shell脚本用于计算呼叫中心未应答的询问的数量 应该接收一天内所报告的询问的总数和应答的询问的数量, 应该接收一天内所报告的询问的总数和应答的询问的数量,以便计算 未应答的询问的数量。 未应答的询问的数量。
14
echo "The date is `date`”
expr命令 expr命令 用于求值算术表达式。 用于求值算术表达式。该命令的输出被发送到 标准输出 将在屏幕上显示9 $ expr 4 + 5 将在屏幕上显示9
命令替换( 命令替换(续)
算术展开: 算术展开: 你可以在$((… ))中括一个表达式 你可以在$((… ))中括一个表达式,用 中括一个表达式, 下面的命令来计算它的值: 下面的命令来计算它的值: $((expression))
16
所有未应答的询问的总数=所有询问的总数所有未应答的询问的总数=所有询问的总数-应答的询问的 数量
echo "Please enter the total number of queries reported today." read totalqueries echo "Please enter the number of queries answered." read answered pending=$((totalqueriespending=$((totalqueries-answered)) echo "Number of calls pending = $pending“ chmod +x callpending
8
读入值给变量 在执行shell脚本时,shell还允许用户 在执行shell脚本时,shell还允许用户 shell脚本时 从键盘中输入一个值给变量。 从键盘中输入一个值给变量。可以使用 read命令来做 read命令来做 $ read fname
本地和全局 Shell 变量
局部变量 当引用shell shell时 只有创建它的shell shell能够知道 当引用shell时,只有创建它的shell能够知道 到变量的存在 全局变量 称为子shell 称为子shell shell中创建的变量局部于创建它的shell,除 中创建的变量局部于创建它的shell, shell中创建的变量局部于创建它的shell,除 非使用export export命令特别指出是全局的 非使用export命令特别指出是全局的 环境变量 通过改变这些变量的值,用户能够定制此环境 通过改变这些/bin/bash echo "Enter the percentage of calls answered same day." read actual if [ $actual -le 80 ] then echo "Your Grade is Average." elif [ $actual -gt 80 -a $actual -le 90 ] then echo "Your Grade is Good." else echo "Your Grade is Outstanding." fi
本地和全局 Shell 变量(续) 变量(
环境变量( 环境变量(续) SHELL变量 SHELL变量 环境变量存储了用户的缺省shell 环境变量存储了用户的缺省shell env命令 env命令 可用来查看所有的已移出的环境变量表和 它们各自的值
13
命令替换
在单个命令行中使用多个命令的另一种方法(非 在单个命令行中使用多个命令的另一种方法( Pipes) Pipes)是通过命令替换
4
概述
echo命令 echo命令 用于在屏幕上显示消息 $ echo "This is an example of the echo command" 这是echo echo命令的一个例子 这是echo命令的一个例子