Shell脚本

概念

Shell脚本是包含一系列命令的文本文件,Shell读取此文件并执行命令
应用场景:
重复性操作;
批量事务处理;
自动化运维;
定时任务执行。

Shell脚本编写

我们可以直接在Linux界面进行操作,首先新建一个文件。
Shell脚本是以#!/bin/bash开头的。#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
用echo命令向窗口输出文本
在这里插入图片描述
保存并退出。然后我们需要对该文件赋权,给其增加一个执行的权限

在这里插入图片描述
然后就可以调用我们需要的结果。
调用方式:
最常用的:./脚本路径
路径调用:如果在当前目录,则使用./test/sh,绝对路径也可以
普通脚本执行:sh脚本路径
指定b shell执行:/bin/bash 脚本路径
在这里插入图片描述
1、变量

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。

#!/bin/bash
a=1
echo $a
~

打印变量时,要再变量前加上$符,变量之间也可以引用:

#!/bin/bash
a=1
b=$a
c=${b}
echo $b
echo $c

在这里插入图片描述
除了可以赋值常量或者一个字符串外,我们也可以赋值查询语句

#!/bin/bash
result=`cat /test/java/exercise/firstShell.sh`
echo $result

可以直接调用出这一查询结果的值:
在这里插入图片描述
有时为了防止不小心改写了变量的赋值,我们可以设为该变量为只读:

#!/bin/bash
a='abc'
readonly a
a='def'
echo $a

即使我们重新给a赋值,a也不会改变
在这里插入图片描述
运算:
Shell的运算需要在两个小括号,或者一个中括号中进行:

#!/bin/bash
a=1
b=2
c=$(($a+$b))
d=$[$a*$b]
echo $c
echo $d

在这里插入图片描述
Shell字符串:
Shell字符串有单引号和双引号两种,这两个情况不同:

单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号字符串
双引号里可以有变量
双引号里可以出现转义字符

#!/bin/bash
name='sam'
gender="man"
str="Hello,$name"
sex='The person is a $gender'
echo $str
echo $sex

可以看到,双引号中可以引用单引号所定义的变量,反之则不行
在这里插入图片描述

2、传递参数

我们在执行Shell脚本时,也可以向脚本传递参数

#!/bin/bash
echo "当前执行的文件:$0"
echo "传递的第一个参数:$1"
echo "传递的第二个参数:$2"
echo "传递到脚本的参数个数:$#"
echo "以一个单字符串向脚本传递的参数:$*"
~

1,2和hello都是我们传递的参数,可以传输到Shell脚本中:
在这里插入图片描述

3、逻辑运算符

数值型
大于:-gt
小于:-lt
等于:-eq或==
不等于:-ne
小于等于:-le

字符串型:
等于:=或==
不等于:!=
是否为空:-z 字符串
下面我们结合上述的传递参数来运用一下逻辑运算符。

#!/bin/bash
a=$1
if [ $a -lt 10 ]
then
        echo "a小于10"
elif [ $a -gt 10 ]
then
        echo "a大于10"
else
        echo "a等于10"
fi

Shell中的if语句和java中的较类似,最后以fi结尾。
通过传参,我们可以完称比较。当然,也可以直接在代码中进行比较,然后再控制台命令调出也可
在这里插入图片描述
字符串进行比较:

#!/bin/bash
a='abc'
b='abc'
if test $a == $b
then
echo 'true'
else
echo 'false'
fi

在这里插入图片描述
这里我们用test代替中括号,结果为true,说明二者相等

4、数组

Shell脚本的数据是用小括号定义的,数组的坐标从0开始。各元素之间用空格隔开,而不用逗号隔开,这一点要注意。

#!/bin/bash
arr=(1 2 3 4 5)
echo ${arr[0]}
echo ${arr[3]}
echo ${arr[@]}
~

我们定义一个数组arr,检索它下标为0和3的元素,用@可以遍历它所有的元素:
在这里插入图片描述
获取数组长度:

#!/bin/bash
arr=(1 2 3 4 5)
echo ${#arr[@]}
echo ${#arr[*]}
~

在这里插入图片描述

5、循环

while循环:
while循环后面跟判断条件,do~done之间进行运算

#!/bin/bash
a=1
while test $a -le 10
do
echo $a
let a++
done
~

完成1~10的遍历,-le表示小于等于
在这里插入图片描述
for循环
for循环的一般格式:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

如果要写成一行,各语句减用“;”隔开

for var in item1 item2 ... itemN; do command1; command2… done;

例如:
循环遍历1~5

#!/bin/bash
for a in 1 2 3 4 5
do
echo $a
done

在这里插入图片描述
我们还可以用下面的方式遍历,和java中for循环的遍历类似:

#!/bin/bash
for (( b=2;$b<=10;b++ ))
do
echo $b
done

在这里插入图片描述
case循环
case循环类似于java中的switch循环类似,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令,基本格式:
已esac结尾

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

例如

#!/bin/bash
num=$1
case $num in
1)
echo '您选择了 1'
;;
2)
echo '您选择了 2'
;;
3)
echo '您选择了 3'
;;
*)
echo '您选择了大于3的数'
;;
esac

这里我们从控制台输入数字选择:
在这里插入图片描述
TMOUT
在用户输入空闲一段时间后自动断开

#!/bin/bash
TMOUT=3
echo "What's your name?"
echo "You only have $TMOUT seconds to answer!"
read name
if test $? -eq 0
then
echo "Your name is $name"
else
echo "Time out"
fi

TMOUT是从read语句开始计时的
可以看出,三秒内输入可以正常输出,否则超时自退出
在这里插入图片描述

拓展链接

如果想深入了解Shell脚本命令的,可以点此链接:
Shell脚本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值