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

示例

#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo $s

基本语法二

for 变量 in 值1 值2 值3...
do
程序
done

示例

#!/bin/bash
for i in "$*"
do
echo $i
done
for j in "$@"
do
echo $j
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

示例

#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s

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)

传参

#!/bin/bash
function sum()
{
s=0
s=$[$1+$2]
echo $s
}
read -p "input param1" p1
read -p "input param2" p2
sum $p1 $p2

带返回值

#!/bin/bash
function mul()
{
s=$[2*3]
return $s
}
mul
echo "mul=$?"

read 读取控制台输入

基本语法

read (选项) (参数)

选项:

  • -p:指定读取值时的提示语

  • -t:指定读取值时等待的时间 (秒)

参数:

  • 变量:指定读取值的变量名

示例

#!/bin/bash
read -t 7 -p "pls input" name
echo $name

test命令

用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

shell脚本文件引用

两种引用写法:

  • . filename ;使用 . 号来引用文件,注意点号(.)和文件名中间有一空格

  • source filename



posted @ 2020-06-18 22:34  hjy1995  阅读(173)  评论(0编辑  收藏  举报