day 43 shell编程基础

1. 脚本格式

#!/bin/bash    //#! 幻数 指定脚本用的命令解释器
#加脚本内容
执行脚本的方法:
    sh
    sh -x

2. 变量

在开始进行定义ip=10.0.0.201
方便脚本里面进行重复使用

1)命名规则

看见变量名称 识别变量作用
不能以数字开头
2)引号

单引号:所见即所得
双引号:可以解析特殊符号  如:`` $()  $  !
不加引号:与双引号类似  支持通配符  *  {} ? []   [^]
反引号:优先执行 引号里面为命令

定义变量时 变量中有空格 必须用引号

3)变量分类
(1)局部变量(普通变量)

    IP=10.0.0.200
    time=2019-5-30
    取变量内容
        echo $weekday    echo ${week}day

例1:局部变量 定义与使用:

[root@m01 scripts]# date=7
[root@m01 scripts]# echo $dateday

[root@m01 scripts]# echo $(date)day
Thu May 30 09:01:11 CST 2019day
[root@m01 scripts]# echo ${date}day
7day

(2)全局变量(环境变量)

  • 特点

    系统创建
    大部分地方 意思相同
    大写

  • 常用
    PATH
    PS1
    LANG
  • 创建

    export 加定义的变量

  • 取消变量(删除)

    unset +变量名

(3)局部变量 VS 全局变量
source
(4)特殊变量

    $?
        上一条命令的返回值
        0 正确
        非0 有问题
    $数字
        $1  $3
        $0
    $#
        命令行参数的个数
        判断参数的个数
    $*
        脚本的所有参数

例2:$1 $2 $3 $0的用法:

[root@m01 scripts]# cat show.sh 
#!/bin/bash

echo $1 $2 $3 $0
[root@m01 scripts]# echo show.sh  oldboy lidao oldgirl alex
show.sh oldboy lidao oldgirl alex

例3:变量的应用

[root@m01 /server/scripts]# x=10
[root@m01 /server/scripts]# y=99
[root@m01 /server/scripts]# awk  'BEGIN{print $x/$y}'
awk: cmd. line:1: fatal: division by zero attempted
[root@m01 /server/scripts]# awk  'BEGIN{print x,y}'
 
[root@m01 /server/scripts]# awk -vn1=10 -vn2=99  'BEGIN{print n1/n2}'
0.10101
[root@m01 /server/scripts]# awk -vn1=$x -vn2=$y  'BEGIN{print n1/n2}'
0.10101

3. 判断

(1)特殊符号

        &&  前一个命令执行成功 执行后面的命令
        ||  前一个命令没有执行成功 执行后面的命令

(2)[] 条件表达式

括号内两个空格

        文件目录
            [ -d /tmp/old ]
                判断目录是否存在
            -f  文件
        比大小
            单词
            -eq   ==
                equal  等于
            -ne   !=
                not equal 不等于
            -gt    >
                great than
            -ge    >=
                great equal
            -lt     <
                less than 小于
            -le     <=
                less equal 

(3)if条件 判断
简单格式

例4:if条件语句:

[root@m01 scripts]# cat cal_v1.sh
#!/bin/bash

x=$1
y=$2

if [ $# -lt 2 ];then
  echo "Usage: sh $0 num1 num2"

  else
   awk -vn1=$x -vn2=$y  'BEGIN{print n1+n2}'
   awk -vn1=$x -vn2=$y  'BEGIN{print n1-n2}'
   awk -vn1=$x -vn2=$y  'BEGIN{print n1*n2}'
   awk -vn1=$x -vn2=$y  'BEGIN{print n1/n2}'
fi
[root@m01 scripts]# sh cal_v1.sh 3
Usage: sh cal_v1.sh num1 num2
[root@m01 scripts]# sh cal_v1.sh 3 4
7
-1
12
0.75

(4)for循环

(5)生产案例 :需求
判断定时任务是否运行中
例:查看定时任务是否运行中

[root@m01 scripts]# cat cron.sh 
#!/bin/bash

count=$(ps -ef |grep -c crond )

if [ $count -ge 2 ];then
   echo 'crond running'
else
   echo 'crond stop'
fi
[root@m01 scripts]# systemctl stop crond
[root@m01 scripts]# sh cron.sh
crond stop
[root@m01 scripts]# systemctl start crond
[root@m01 scripts]# sh cron.sh
crond running

你可能感兴趣的:(day 43 shell编程基础)