shell(二)流程控制和函数
1. 基本语法
[ condition ] 注意 condition 前后要有空格
条件非空即为true,[] 则为false
多条件判断:与 && , 或 ||
2. 常用判断条件
(1)字符串比较
-
=,相等;[ $a = $b ],等号两边有空格
-
!=,不等;[ $a != $b ],等号两边有空格
-
-z ,字符串长度是否为0,为0返回true, [ -z $a ]
-
-n,字符串长度是否不为0,不为0返回true,[ -n $a ]
-
$, 字符串是否为空,不为空返回 true ,[ $a ]
(2)两个整数之间比较
-
-eq 等于 (equal)
-
-ne 不等于 (not equal)
-
-lt 小于 (less than)
-
-le 小于等于 (less equal)
-
-gt 大于 (greater than)
-
-ge 大于等于 (greater equal)
(3)按照问价权限进行判断
-
-r 读权限, [ -r $file ]
-
-w 写权限, [ -w $file ]
-
-x 执行权限, [ -x $file ]
(4)按照文件类型进行判断
-
-f 文件存在且为常规文件,[ -f $file ]
-
-d 文件存在且为目录,[ -d $file ]
-
-e 文件存在 (existence), [ -e $file ]
流程控制
if 判断
基本语法
-
写法一
if [ condition ];then
程序
fi
-
写法二
if [ condition ]
then
程序
fi
if...else...fi 格式
if [ condition ];then
程序
else
程序
fi
if...elif...fi 格式
if [ condition ];then
程序
elif [ condition ];then
程序
fi
注意事项
-
[ condition ] ,中括号和 condition之间必须有空格
-
if 后要有空格
case 语句
基本语法
case $变量名 in
"值1")
如果变量等于值1,则执行程序1
;;
"值2")
如果变量等于值2,则执行程序2
;;
...
*)
如果变量值不是以上的值,则执行此程序,类似于default
;;
esac
注意事项
-
case 行尾必须为单词 in ,每一个模式匹配必须以右括号 ) 结束
-
双分好 ;; 表示命令序列结束,相当于Java的break
-
最后的 *) 表示默认模式,相当于Java的default
for 循环
基本语法一
for((初始值;循环控制条件;变量变化))
do
程序
done
示例
基本语法二
for 变量 in 值1 值2 值3...
do
程序
done
示例
执行结果如下,区别 $* 和 $@
[root@192 shell_jiaoben]# bash for2.sh 1 3 4 5
1 3 4 5
1
3
4
5
while 循环
基本语法
while [ condition ]
do
程序
done
示例
break 、continue
和Java类似
函数
系统函数
1. basename基本语法
basename [string/pathname] [suffix]
-
basename 命令会删掉 [string/pathname] 中所有的前缀,即 [string/pathname] 中 / 之前的内容,然后将剩余的内容显示出来
-
suffix 为后缀,basename 会将 [string/pathname] 中的 suffix 去掉
[root@192 shell_jiaoben]# basename /home/shell_jiaoben/read.sh .sh
read
从文件路径和文件后缀中截取文件名
2. dirname基本语法
dirname 文件绝对路径
-
从给定的决定路径(包含文件名) 去除文件名,返回剩下的路径(目录部分)
[root@192 shell_jiaoben]# dirname /home/shell_jiaoben/read.sh
/home/shell_jiaoben
自定义函数
定义函数基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
-
必须在调用函数之前声明函数,shell脚本是逐行运行
-
函数返回值,只能通过 $? 系统变量获得,可以显示加 : return 返回,将以最后一条命令运行结果作为返回值,return 后跟数值 n (0-255)
传参
带返回值
read 读取控制台输入
基本语法
read (选项) (参数)
选项:
-
-p:指定读取值时的提示语
-
-t:指定读取值时等待的时间 (秒)
参数:
-
变量:指定读取值的变量名
示例
test命令
用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
shell脚本文件引用
两种引用写法:
-
. filename
;使用 . 号来引用文件,注意点号(.)和文件名中间有一空格 -
source filename