【linux笔记】linux入门简介_shell流程控制(14)

Page content

这一篇整理了Shell流程控制相关的内容。

1.条件判断

1.test condition
2.[ condition ](注意 condition 前后要有空格)

1.1 两个整数之间比较

  • -eq 等于(equal)
  • -lt 小于(less than)
  • -gt 大于(greater than) 注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。

1.2 按照文件权限进行判断

  • -r 有读的权限(read)
  • -w 有写的权限(write)
  • -x 有执行的权限(execute)

1.3 按照文件类型进行判断

  • -e 文件存在(existence)
  • -f 文件存在并且是一个常规的文件(file)
  • -d 文件存在并且是一个目录(directory)

2.if判断

if [ 条件判断式 ]
then
    程序
elif [ 条件判断式 ]
then
    程序
else
    程序
fi
  • [ 条件判断式 ],中括号和条件判断式之间必须有空格
  • if 后要有空格

3.case 语句

case $变量名 in 
"值 1")
    如果变量的值等于值 1,则执行程序 1
;;
"值 2")
    如果变量的值等于值 2,则执行程序 2
;;
    ...省略其他分支...
*) 
    如果变量的值都不是以上的值,则执行此程序
;;
esac
  • case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
  • 双分号“;;”表示命令序列结束,相当于 java 中的 break。
  • 最后的“*)”表示默认模式,相当于 java 中的 default。

4.for 循环

for (( 初始值;循环控制条件;变量变化 )) do
    程序
done

sum=0
for((i=0;i<=100;i++))
do
       sum=$[$sum+$i]
done
echo $sum
for 变量 in 值 12 值 3...
do
    程序
done

for i in cls mly wls
do   echo "ban zhang love $i"
done

5.while 循环

while [ 条件判断式 ] do
    程序
done

sum=0
i=1
while [ $i -le 100 ]
do
       sum=$[$sum+$i]
       i=$[$i+1]
done

6.read 读取控制台输入

read (选项) (参数)

1选项

  • -p:指定读取值时的提示符;
  • -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待

2参数

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

7.函数

7.1 系统函数

basename [string / pathname] [suffix]

$ basename /home/xx/rizhi.txt .txt
rizhi

dirname 文件绝对路径

$ dirname /home/xx/rizhi.txt
/home/xx
 

7.2 自定义函数

[ function ] funname[()] 
{
    Action;
    [return int;] 
}
  • 必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。
  • 函数返回值,只能通过$?系统变量获得,可以显示加:return 返回, 如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)

其他

一个在jenkins里用到的简单例子

#!/bin/bash

#删除历史数据
#rm -rf xxxx

##获取传入参数
appname=$1
echo "arg:$1"

#获取正在云心的jar包的pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`

echo $pid

#如果pid为空,提示一下,否则执行kill
#使用 -z 做空值判断
if [ -z $pid ];
    then
        echo "$appname not started"
    else
        kill -9 $pid
        echo "$appname stopping..."

check=`ps -ef | grep -w $pid | grep java`
if [ -z $check ];
    then
        echo "$appname pid:$pid is stop"
    else 
        echo "$appname stop failed"

欢迎大家的意见和交流

email: li_mingxie@163.com