主要内容和学习要求 ▣掌握创建she11脚本的基本步骤 ▣学会使用条件测试 ▣掌握i£条件结构与case选择结构 ▣掌握f£or循环、while循环和unti1循环结构 ▣学会shift命令的使用 口学会she11脚本的调试
2 主要内容和学习要求 掌握创建 shell 脚本的基本步骤 学会使用条件测试 掌握 if 条件结构与 case 选择结构 掌握 for 循环、while 循环和 until 循环结构 学会 shift 命令的使用 学会 shell 脚本的调试
Shell脚本 ▣Shell脚本 当命令不在命令行中执行,而是从一个文件中执行时,该文 件就称为shel1脚本。shel1脚本按行解释。 ▣Shell脚本的编写 ●she11脚本是纯文本文件,可以使用任何文本编辑器编写 ●shel1脚本通常是以.sh作为后缀名 ▣Shell脚本的执行 chmod +x script name ./script name sh script name 3
3 Shell 脚本 Shell 脚本的编写 Shell 脚本 当命令不在命令行中执行,而是从一个文件中执行时,该文 件就称为 shell 脚本。shell 脚本按行解释。 z Shell 脚本是纯文本文件,可以使用任何文本编辑器编写 z Shell 脚本通常是以 .sh 作为后缀名 Shell 脚本的执行 chmod +x script_name ./script_name sh script_name
Shell脚本 ▣Shell脚本的格式 ◆第一行:指定用哪个程序来编译和执行脚本。 #!/bin/bash #!/bin/sh #!/bin/csh ◆可执行语句和shel1控制结构 一个shel1脚本通常由一组Linux命令、shel1命令、 控制结构和注释语句构成。 ◆注释:以“#”开头,可独占一行,或跟在语句的后面。 在脚本中多写注释语句是一个很好的编程习惯
4 第一行:指定用哪个程序来编译和执行脚本。 Shell 脚本的格式 #!/bin/bash 可执行语句和 shell 控制结构 注释:以 “ # ” 开头,可独占一行,或跟在语句的后面。 Shell 脚本 #!/bin/sh #!/bin/csh 一个 shell 脚本通常由一组 Linux 命令、shell 命令、 控制结构和注释语句构成。 在脚本中多写注释语句是一个很好的编程习惯
Shell脚本举例 #!/bin/bash This is the first Bash shell program Scriptname:greetings.sh echo echo -e "Hello $LOGNAME,\c" echo "it's nice talking to you." echo -e "Your present working directory is:" pwd Show the name of present directory echo echo "The time is date +!\nBye" echo sh greetings chmod +x greetings greetings
5 #!/bin/bash # This is the first Bash shell program # Scriptname: greetings.sh echo echo –e "Hello $LOGNAME, \c" echo "it's nice talking to you." echo –e "Your present working directory is:" pwd # Show the name of present directory echo echo "The time is `date +%T`!. \nBye" echo sh greetings chmod +x greetings greetings Shell 脚本举例
Shell脚本举例 #!/bin/bash This script is to test the usage of read Scriptname: ex4read.sh echo "===examples for testing read === echo -e "What is your name?\c" read name echo "Hello Sname" echo echo -n "Where do you work?" read echo "I guess SREPLY keeps you busy!" echo rea 1-p "Enter your job title:" echo "I thought you might be an SREPLY." echo echo "===End of the script ==
6 #!/bin/bash # This script is to test the usage of read # Scriptname: ex4read.sh echo "=== examples for testing read ===" echo -e "What is your name? \c" read name echo "Hello $name" echo echo -n "Where do you work? " read echo "I guess $REPLY keeps you busy!" echo read -p "Enter your job title: " echo "I thought you might be an $REPLY." echo echo "=== End of the script ===" Shell 脚本举例
条件测试 ◆条件测试可以根据某个特定条件是否满足,来选择执行 相应的任务。 ◆Bash中允许测试两种类型的条件: 命令成功或失败,表达式为真或假 ◆任何一种测试中,都要有退出状态(返回值),退出状态 为0表示命令成功或表达式为真,非0则表示命令失败或表 达式为假。 ◆状态变量$?中保存命令退出状态的值 grep SUSER /etc/passwd echo $ grep hello /etc/passwd;echo $
7 状态变量 $? 中保存命令退出状态的值 grep $USER /etc/passwd echo $? grep hello /etc/passwd; echo $? 条件测试 条件测试可以根据某个特定条件是否满足,来选择执行 相应的任务。 Bash 中允许测试两种类型的条件: 命令成功或失败,表达式为真或假 任何一种测试中,都要有退出状态(返回值),退出状态 为 0 表示命令成功或表达式为真,非0 则表示命令失败或表 达式为假
测试表达式的值 口表达式测试包括字符串测试、 整数测试和文件测试。 口内置测试命令test ●通常用test命令来测试表达式的值 x=5;y=10 test $x -gt Sy echo $ ●test命令可以用六括号来代替 x=5;y=10 $x -gt Sy 方括号前后要留空格」 echo $
8 内置测试命令 test z 通常用 test 命令来测试表达式的值 x=5; y=10 test $x -gt $y echo $? z test 命令可以用 方括号 来代替 x=5; y=10 [ $x -gt $y ] echo $? 表达式测试包括字符串测试、整数测试和文件测试。 测试表达式的值 方括号前后要留空格!
测试表达式的值 ●2.x版本以上的Bash中可以用双方括号来测试表达式 的值,此时可以使用通配符进行模式匹配。 name=Tom Sname [Tt]?? echo $ [Sname = [t]??]] echo $
9 name=Tom [ $name = [Tt]?? ] echo $? z 2.x 版本以上的 Bash 中可以用双方括号来测试表达式 的值,此时可以使用通配符进行模式匹配。 测试表达式的值 [[ $name = [Tt]?? ]] echo $?
字符串测试 口字符串测试 操作符两边必须留空格! [-z str 如果字符串str长度为0,返回真 [-n str 如果字符串str长度不为0,返回真 strl =str2 两字符串相等 [ strl ! str2 两字符串不等 name=Tom;[-z Sname ]echo $ name2=Andy;Sname Sname2 echo $ 10
10 字符串测试 [ str1 != str2 ] 两字符串不等 [ -n str ] 如果字符串 str 长度不为 0,返回真 [ str1 = str2 ] 两字符串相等 [ -z str ] 如果字符串 str 长度为 0,返回真 name=Tom; [ -z $name ]; echo $? 操作符两边必须留空格! 字符串测试 name2=Andy; [ $name = $name2 ] ; echo $?