学习目标:
掌握条件分支语句语法:if、case
总结:
1- 条件判断的或逻辑为:-o
2- test用法和[ ]用法等价。注意对于位置变量可以用等于号等符号,对于整形、字符、文件只能用对应的判断符号!!
3- 条件为真时等于0!
4- if判断中用 [], []外部、内部的前后不能由空格
5- case匹配项只能是字符串,每个分支以;;结束
正文:
1- if
基本原里和C语言一样,只是细节差异。
a- 基本语法
/*1- 无else分支*/
if 条件
then
do somtthing
fi
/*2- 有else分支*/
if 条件
then
do somtthing
else
do something
fi
/*3- 多个else分支*/
if 条件
then
do something
elif 条件
then
do something
else
do something
fi
b- 示例
说明:
编写一个脚本,用于判断输入的文件是什么类型的。
对于文件类型可以参考:https://blog.csdn.net/weijuqie0697/article/details/81705312
总结:
1- 条件判断的或逻辑为:-o
2- test用法和[ ]用法等价
3- 条件为真时等于0!
4- if判断中用 [], []外部、内部的前后不能由空格
脚本文件:
#!/bin/bash
#入参检查。-o表示或逻辑
if [ $# -le 0 -o $# -gt 1 ]
then
echo "input param is zero or to much!"
exit
fi
#判断文件是否存在。
#注意[]内部、外部由空格隔开;条件if ! test -e $1和if ! [ -e $1 ]等价
if ! [ -e $1 ]
then
echo "file not exit"
exit
fi
if [ -f $1 ]
then
echo "it's file"
elif [ -d $1 ]
then
echo "it's direct"
elif [ -L $1 ]
then
echo "it's bdev"
elif [ -c $1 ]
then
echo "it's cdev"
elif [ -b $1 ]
then
echo "it's bdev"
elif [ -S $1 ]
then
echo "it's socket"
else
echo "other type file"
fi
演示示例:
#终端中输入下面命令,打印文件类型
./shell.sh 文件名
可以通过下面命令去/dev路径下找字符设备(c)、块设备文件(d)、链接文件(L)、普通文件(f)、目录(d)
ls -l /dev | grep "^c" //在/dev路径下查找文件类型为字符设备的文件
2- case
a- 基本语法
和C语言大同小异:
I- 只能是字符串
II- 每个分支以两个分号;;结束
III- 某个分支有两个条件可以用或”|‘
III- *)表示C语言里的default分支,最后可以不加双分号;;
case 字符串 in
条件1)
do something
;;
条件2 | 条件3)
do something
;;
*)
do something
esac
b- 示例程序
使用case编写判断文件类型的程序
#!/bin/bash
#入参检查。-o表示或逻辑
if [ $# -le 0 -o $# -gt 1 ]
then
echo "input param is zero or to much!"
exit
fi
#判断文件是否存在。
#注意[]内部、外部由空格隔开;条件if ! test -e $1和if ! [ -e $1 ]等价
if ! [ -e $1 ]
then
echo "file not exit"
exit
fi
#获取文件类型,为了强行用case也是醉了。。。
if [ -f $1 ]
then
type=f
elif [ -d $1 ]
then
type=d
else
type=o
fi
case $type in
f)
echo "it's file"
;;
d)
echo "it's direct"
;;
*)
echo "other type file"
esac