Shell编程(三、提高)

目录

1.Shell流程控制

1.1 if else if

1.2 if else:

1.3 if else-if else

1.4  for 循环

2. Shell 函数

3. Shell test 命令

数值测试

字符串测试

4. shell脚本隔几秒执行sleep命令

5.书写规范

6. 常用函数

6.1 shell脚本获取当前路径



会定义变量,会使用系统变量,会捕捉命令的返回值,还不够,
有了变量,还要有表达式和控制结构,才能叫”程序”。

进阶部分将多以案例来说明。

1.Shell流程控制

流程控制与条件判断一般要结合使用,通过实例代码可以更好的理解:

1.1 if else if

# 格式
if condition
then
    command1 
    command2
    ...
    commandN 
fi

# ----------------分割线---------------------
# 以下为案例:创建一个目录 dir1, 如果创建成功,则显示 ok;如果失败,则显示 fail

#!/bin/bash
if mkdir dir1
then
	echo ok
else
	echo fail
fi

1.2 if else:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

1.3 if else-if else

if else-if else 语法格式:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

1.4  for 循环

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。
in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。

# -------------------语法----------------  
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

#!/bin/bash  

# -------------------案例----------------  
list="rootfs usr data data2"  
for i in $list;  
do  
echo $i is appoint ;  
done

# -------------------输出结果----------------  
rootfs is appoint
usr is appoint
data is appoint
data2 is appoint

循环还有while,break,continue等关键字的用法,功能和其他高级语言一致,不过多的进行演示。

2. Shell 函数

说明:

  • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

下面的例子定义了一个函数并进行调用:

#!/bin/bash
demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

# ------------分割线:输出结果---------------------------
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

下面定义一个带有return语句的函数:

#!/bin/bash

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

#-----------------分割线:输出结果----------------------------

这个函数会对输入的两个数字进行相加运算...
输入第一个数字: 
1
输入第二个数字: 
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !

函数返回值在调用该函数后通过 $? 来获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

3. Shell test 命令

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

数值测试

参数说明
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真

字符串测试

参数说明
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真

 

4. shell脚本隔几秒执行sleep命令

shell中可以调用其他的启停脚本,有的脚本执行需要等其他的启动完成才可以,因此有必要增加时间控制,进行等待,使用sleep命令,后面直接跟秒数。如下:

   

     cmd(shell 命令)

     sleep x(x为秒数)

5.书写规范

  •  脚本文件名称以.sh结束
  •  脚本开头一定要指定解释器
  •  脚本中#代表注释,#后的内容不会执行,不用的命令等可以用#注释掉,脚本中尽量不要出现中文注释以免出现因字符集不同产生乱码
  •  代码符号书写规范

     1.成对的符号一定要都写出来再添加内容,避免遗忘漏写;如 "" '' []等, []里面两端必须有空格,中间写内容

     2.流程控制语句一次书写完,再添加内容;(if 条件 ; then  内容;fi)

       3.书写的代码符号都是英文输入法格式

       4.通过缩进让代码易读

6. 常用函数


6.1 shell脚本获取当前路径

#方法一
#!/usr/bin/env bash
Cur_Dir=$(pwd)
echo $Cur_Dir

#方法二
#!/usr/bin/env bash
basedir=cd $(dirname $0); pwd -P
echo $basedir
其中,
dirname $0,取得当前执行的脚本文件的父目录

cd dirname $0,进入这个目录(切换当前工作目录)

pwd,显示当前工作目录(cd执行后的)

 

参考资料:

Alan.Zhanghttps://www.cnblogs.com/zeq912/p/9501915.html

菜鸟教程:https://www.runoob.com/linux/linux-shell.html

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值