一、规范
- Shell脚本是以.sh结尾的文件;
- sh 文件的第一行内容为 #!/bin/bash,它告诉系统使用(Bourne Again Shell)解释器来执行;
- shell 中的注释:# ;
- shell 文件的执行有两种方式:
二、变量
- 变量名=变量值:等于号两边不能有空格;
- 变量命名规范:不能以数字开头,可以由字母、数字、下划线组成;
- 输出变量内容:echo $变量名;
- 变量的释放:unset 变量名;
- 特殊的变量,带有空格的变量定义
练习:
#!bin/bash dir=`pwd` echo "当前所在的目录是:$dir"输出当前所在的目录
#!bin/bash # 进入/etc目录下 cd /etc # 计算文件个数 num=`ls -al|wc -l` # 输出 echo "/etc下文件个数为:$num"计算/etc目录下有多少个文件
#!bin/bash read -p "请输入指定目录:" dir cd $dir # 计算文件个数 num=`ls -al|wc -l` # 输出 echo "$dir下文件个数为:$num"统计任何指定目录下的文件个数
read 用法
二、参数传递
练习:
#!/bin/bash echo "这个数据是$1" echo "这个数据是$2" echo "这是$0" echo "这是$@" echo "这是$#"
结果:
三、重定向
- 正确的命令:用 1 表示
- 错误的命令:用 2 表示
四、条件判断
1、if...else
if [ 条件 ] then 语句 else 语句 fi ##################### if [ 条件 ];then 语句 else 语句 fiif...else语法
- if 后面要有空格
- 中括号内条件两边要有空格
- 多个条件间要有空格
- 条件中如果存在变量,那么变量的两边要有双引号,如:if [ "$dir" == "" ]
练习:
#!/bin/bash dir=/root command=`ls $dir` if [ "$command" == "" ];then echo "目录为空" else echo "目录不为空" fi判断/root目录是否为空
#!/bin/bash read -p "请输入目标目录:" dir command=`ls $dir` if [ "$command" == "" ];then echo "目录为空" else echo "目录不为空" fi通过用户输入任意目录判断是否为空
- 字符串比较
- ==:判断是否相等
- !=:判断是否不相等
#!/bin/bash read -p "请输入用户名和密码:" username password if [ "$username" == "admin" -a "$password" == "123456" ];then echo "用户名和密码正确" else echo "用户名或密码不正确" fi判断用户输入的用户名和密码是否正确
- 逻辑运算符:
- 或:-o
- 与:-a
- 非:!
#!/bin/bash read -p "请输入一个数字:" num if [ "$num" -gt 0 ] then ((num++)) echo $num else ((num--)) echo $num fi输入数字,判断是否大于0
- 比较运算符(数字)
- -eq ---> 判断是否相等
- -ne ---> 判断是否不相等
- -gt ----> 判断是否大于
- -ge ---> 判断是否大于等于
- -lt ----> 判断是否小于
- -le ----> 判断是否小于等于
- 数字变量操作
- 递增
- ((i++))
- ((i+=1))
- i=$[$i+1]
- let i=i+1
- i=$(($i+1))
- 递减也是一样有上面5中方式
- 递增
#!/bin/bash read -p "请输入对应的目录:" dir if test -d $dir then num=`ls $dir|wc -l` echo "目录$dir下的文件个数为:$num" else echo "目录$dir不存在" fi判断用户输入的目录是否存在
2、if...elif..else
if [ 条件 ] then 语句 elif [ 条件 ] then 语句 elif [ 条件 ] then 语句 .... else 语句 fiif...elif...else语法
练习:
判断学生的成绩,范围在90-100提示优秀,80-90之间提示良好,70-80之间则提示一般,60-70之间提示及格。其他则提示不及格
#!/bin/bash read -p "请输入学生的成绩:" score if [ "$score" -gt 90 -a "$score" -lt 100 ] then echo "优秀" elif [ "$score" -gt 80 -a "$score" -lt 90 ] then echo "良好" elif [ "$score" -gt 70 -a "$score" -lt 80 ] then echo "一般" elif [ "$score" -gt 60 -a "$score" -lt 70 ] then echo "及格" else echo "不及格" fi判断学生成绩
判断用户输入的内容是否为空,为空则提示,不为空则判断是否为目录,不为目录则判断是否为文件,否则提示错误信息
#!/bin/bash read -p "请输入内容:" content if [ -z "$content" ] then echo "输入内容为空" elif [ -d "$content" ] then echo "是一个目录" elif [ -f "$content" ] then echo "是一个文件" else echo "输入错误" fi判断用户输入内容
- 文件判断
3、case
case $变量名 in "值") 语句;; "值") 语句;; "值") 语句;; ..... *) 语句;; esaccase...esac
- case 这一行最后必须为 in
- ;; ----> 结束语句
- *----> 默认分支
- esac ---> case语句的结束
- 值可以是字符串也可以是数字,还可以是区间范围,但是范围必须是:[0-9]之间
练习:
@H_854_404@
#!/bin/bash read -p "请输入产品编号:" chr case $chr in "001") echo "台灯";; "002") echo "风扇";; "003") echo "电脑";; *) echo "默认是空调";; esac输入一个字符串,判断该用户选择哪款产品
#!/bin/bash read -p "请输入对客服的满意度:" chr case $chr in [0-3]) echo "不满意";; [4-6]) echo "满意";; [7-9]) echo "非常满意";; esac满意度调查
五、循环
1、for
for 变量名 in 列表 do 语句 donefor循环格式
练习:
#!/bin/bash #循环 for i in 1 2 3 4 5 6 7 8 9 10 do echo $i done输出1到10之间的数
#!bin/bash for i in `seq 1 2 10` do echo $i done输出1到10之间的奇数
- seq start size max
- start:开始点
- size:间隔
- max:结束点
- 如果size的值为1,则可以省略
2、while
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。