一、了解什么是shell脚本shell脚本的本质就是 shell命令的有序集合 它属于一种解释型语言不需要编译方便操作者对重复性的劳动进行编程同时shell脚本也是一种无类型语言其变量没有类型或字符串类型注意事项: 对标点符号 和 格式 非常严格 特别是空格二、创建一个shell脚本的步骤1. 创建一个普通文件通常后缀.shtouch hello.sh2. 修改权限 添加可执行权限chmod 777 hello.sh3. 写脚本vim hello.sh注任何一个脚本文件的第一行都必须写 #!/bin/bash4. 运行脚本 ./hello.sheg写一个创建脚本的 创建1.sh#!/bin/bash #创建名为1.sh的脚本文件 touch 1.sh #修改权限 chmod 777 1.sh #在终端打印hello world echo hello world三、shell脚本中的变量变量: 多用于代指文件名即各种名字或参数命令等1、用户自定义变量:变量定义 变量名值 等号两边 没有空格变量使用 引用其值 $变量名 本质是字符替换2、位置变量:$0 运行脚本的指令本身$1,$2,……$9 分别包含第一个到第九个命令行参数3、预定义变量: 有终端预先定义的一些变量由系统保留和维护的一组特殊的变量这些变量通常用于保存程序运行状态等$# 包含命令行参数的个数$ 包含所有命令行参数“$1,$2,……$9”$? 包含前一个命令的退出状态$* 包含所有命令行参数“$1,$2,……$9”$$ 包含正在执行进程的ID号4、环境变量: 一组存储终端环境参数的变量注export 命令可以打印输出 终端所有的环境变量PWD 存储当前工作路径USER 存储当前终端的登录用户HOME 存储当前用户的家目录PATH 存储当前终端 的命令搜索路径eg编写一个脚本文件来创建一个新的脚本#!/bin/bash #定义一个变量 #NAMEif.sh #定义位置变量 NAME$1 echo 正在创建$NAME文件 touch $NAME echo 正在配置文件 chmod 777 $NAME echo 正在写入第一行 echo #!/bin/bash $NAME echo $NAME文件创建成功结果展示四、shell脚本的 输入输出输入echo 输出字符串输出read 从终端读取字符串五、shell中 的算数运算expr 数学表达式注1、 每个符号与数值 间都要有空格分开2、shell脚本支持 - \* / % 但只能做整数运算不能做小数运算六、shell 表达式1、字符串测试s1 s2 测试两个字符串的内容是否完全一样s1 ! s2 测试两个字符串的内容是否有差异-z s1 测试s1 字符串的长度是否为0-n s1 测试s1 字符串的长度是否不为02、整数测试a -eq b 测试a 与b 是否相等a -ne b 测试a 与b 是否不相等a -gt b 测试a 是否大于ba -ge b 测试a 是否大于等于ba -lt b 测试a 是否小于ba -le b 测试a 是否小于等于b-d name 测试name 是否为一个目录-e name 测试一个文件是否存在-f name 测试name 是否为普通文件-L name 测试name 是否为符号链接-r name 测试name 文件是否存在且为可读-w name 测试name 文件是否存在且为可写-x name 测试name 文件是否存在且为可执行-s name 测试name 文件是否存在且其长度不为0f1 -nt f2 测试文件f1 是否比文件f2 更新f1 -ot f2 测试文件f1 是否比文件f2 更旧七、shell中的程序结构1、 if 结构if [ 表达式 ]then命令块1else命令块2fi注如果没有else 可以省略 则if结构可写为if [ 表达式 ]then命令块1fieg输入一个文件名判断该文件是否存在, 若存在则判断是否为普通文件且是空的若是则删除它#!/bin/bash #echo 请输入一个文件名 #read FILE FILE$1 if [ -z $FILE ] then echo UseAge:该脚本用于删除一个空的普通文件 echo 需要指定一个文件名参数 else echo 正在操作$FILE if [ -e $FILE ] then echo 文件存在 if [ -f $FILE ] then echo 是普通文件 if [ -s $FILE ] then echo 文件有内容 else echo 文件没有内容, 删除$FILE rm $FILE fi fi fi fi结果展示2、case 多分支结构case $变量名 in值1) 命令块1;;值2) 命令块2;;...*) 命令块nesac运行逻辑 将变量中字符串与括号左边的字符串比较相等就执行后面的命令块若不相等 继续向后比较注值可以使用通配符eg输入成绩判断输入的成绩的优良中差并输出#!/bin/bash echo 请输入你的成绩: read cj case $cj in 100) echo 满分优秀 ;; 9?) echo 成绩优秀 ;; 8?) echo 成绩良好 ;; [67]?) echo 成绩及格 ;; *) echo 成绩不及格 esac结果展示3、for循环结构1:for (( I0;I10;I ))do循环命令块doneeg: 创建10个文件 文件名为 file_数.txt#!/bin/bash for ((I0;I10;I)) do touch file_$I.txt done结果展示结构2:for 变量名 in 取值列表do循环命令块done注取值列表中是以空格、回车等分隔开的字符串每次循环变量的值就是取值列表中的一个 并且是顺序的eg: 打印输出当前目录中 所有.sh 文件都打印出来#!/bin/bash #file$1 for file in ls *.sh do echo $file done结果展示eg: 写一个脚本实现将当前目录中所有的、空的、普通文件删除#!/bin/bash for file in ls * do echo $file if [ -e $file ] then echo 文件存在 if [ -f $file ] then echo 普通文件 if [ -s $file ] then echo 有内容 else echo 没有内容删除$file rm $file fi fi fi done4、while循环while [ 条件表达式 ]do循环语句块done注shell中的while与C中的运行逻辑完全一样八、循环控制语句breakcontinue注shell中的循环控制语句与C中的break和continue关键字的效果完全一样九、了解shell 的函数1、 函数定义:函数名(){命令块}2、函数调用 函数名3、参数传递 使用位置变量eg在终端打印hello world并计算12的值#!/bin/bash func() { echo hello world return 0 } sum() { aexpr $1 $2 echo a$a return 0 } #调用函数func func #使用命令置换方式调用sum函数 #Asum 1 2 sum 1 2 #echo A$A结果展示