Shell编程与运维:Shell脚本、变量、分支与循环语句、函数以及获取用户输入

1.Shell脚本概述

通过Shell中的各种命令,开发者和运维人员可以对服务器进行维护工作。
但每次都手动输入命令,工作效率太低,而且很容易出错,尤其是需要维护大量服务器时。
为了能够对服务器批量执行操作,我们可以将需要执行的命令写入文件,批量执行,这种文件便是Shell脚本。
Shell脚本一般是以.sh 结尾的文本文件,当然也可以省略扩展名。

2.Shell脚本首行

脚本文件第一行通过注释的方式指明执行脚本的程序。
在Shell脚本中,#开头的文本是注释,但第一句 #! 开头的这句话比较特殊,他会告诉Shell应该使用哪个程序来执行当前脚本。
常见方式有:
  #!/bin/sh
  #!/bin/bash
  #!/usr/bin/env bash
Python脚本的第一句一般是:#!/usr/bin/env python

3.第一个脚本

(1)创建a.sh文件
(2)将下面文本写入a.sh文件中:

#!/bin/bash
echo "Hello World"
echo "I love Linux"

(3)执行chmod a+x a.sh 对脚本授予可执行权限
(4)输入./a.sh 执行脚本
(5)查看脚本的退出状态:echo $?
  Linux中的所有程序执行结束后都有状态码。
  状态码为零表示正常,状态码为正整数代表异常退出。
效果展示:
在这里插入图片描述

4.变量

(1)定义
变量的定义与其他语言差距不大,需要注意的是赋值前后没有空格。

a=123

(2)使用
打印变量a,使用变量时,变量名前面必须加上$符号

echo "$a"
printf "$a\n"

(3)注意引号的差别
双引号将变量a拼接到字符串中,一起打印
单引号将字符串原样打印,不会对变量进行特殊处理

echo "--$a--"
echo '--$a--'

运行结果:
在这里插入图片描述
(4)数值运算
这里的数值和运算符都是expr命令的参数。

第一种方式:(此种方式,在相乘时,需要在乘号前加上‘\’,且运算符前后必须要有空格,否则会报错)

expr 1 + 2
expr 1 - 1
expr 4 \* 2
expr 4 / 2

第二种方式:(此种方式,不需要在在乘号前加上‘\’,也不需要运算符前后必须要有空格)

expr $[1+2]
expr $[1 - 1]
expr $[4 * 2]
expr $[4/2]

两种方式的运行结果相同:
在这里插入图片描述
(5)定义当前Shell下的全局变量
定义:通过export语句定义全局变量
前面我们在设置python环境时,就曾定义过全局变量:export PATH=$ HOME/.local/bin:$ PATH
定义完后,在终端里用source加载脚本:source ./.bashrc
(6)常用的系统环境变量:
    $ PATH:可执行文件目录;
    $ PWD:当前目录;
    $ HOME:家目录;
    $ USER:当前用户名;
    $ UID:当前用户的uid;
运行结果:
在这里插入图片描述

5.分支语句(if)

格式:

if command
then 
   commands
elif command
then
   commands
else
   commands
fi

(1)if语句检查判断的依据实际上是,后面所跟的命令的状态码:0为True,其他值为False

#!/bin/bash

a=12

if ls
then echo 'True'
else echo 'False'
fi

运行结果:
在这里插入图片描述
(2)条件测试命令:[ …]
shell提供了一种专用做条件测试的语句[ … ]
这一对方括号本质上是一个命令,里面的条件是其参数,所以‘[’ 的后面和 ‘]’ 的前面必须有空格,否则会报错。
其可以进行三种比较:
  数值比较、字符串比较、文件比较
用法:

if [condition]
then
   commands
fi

例如:

#!/bin/bash

a=12

if [ $a == "13" ]         
then echo 'True'
else echo 'False'
fi

运行结果:
在这里插入图片描述
(3)条件列表
数值比较:
在这里插入图片描述
字符串比较:
在这里插入图片描述
文件比较:
在这里插入图片描述

6.循环语句(for)

Shell中的循环结构有三种:for、while和until,这里重点介绍for循环
(1)for循环的基本格式:

for 变量 in 序列
do 
    要执行的命令
done

例如:打印并标明1到10中的寄偶数

for i in `seq 1 10`
do
   if [[ $[ $i % 2] == 0 ]]
   then
       echo "偶数: $i"
   else
       echo "奇数: $i"
   fi
done

运行结果:
在这里插入图片描述

seq START END 语句用来产生一个数字序列
$[ NUM1 + NUM2 ] 语句⽤来进⾏基本的数学运算
[[ … ]] 语句⽤来更⽅便的进⾏⽐较判断

(2)C语言风格的 for 循环:

for ((i=0; i<10; i++))
do
   echo "num is $i"
done

运行结果:
在这里插入图片描述
(3)while循环

while [ -f "a.sh" ]
do
    echo True
done

在这里插入图片描述
因存在a.sh文件,所以执行死循环,一直打印True.

7.函数

(1)函数定义
定义时,function不是必须的,可以省略

#!/bin/bash

#定义一个函数
function foo(){
   echo "Hello World"
}
#调用函数
foo

运行结果:
在这里插入图片描述

在终端或脚本中直接输⼊函数名即可,不需要小括号

(2)函数的参数
传参也只需将参数加到函数名后面,以空格做间隔,像正常使用命令那样

#!/bin/bash

get_type(){
 echo "执⾏者是: $0"
 echo "第1个参数:$1"
 echo "第2个参数:$2"
 echo "参数数量是: $#"
 echo "全部的参数: $@"
 echo "全部的参数: $*"
}

get_type a b c d

运行结果:
在这里插入图片描述

8.获取用户输入

read -p "请输入:" xxx
echo "您输入的是:$xxx"

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值