1.shell脚本的创建和执行
1.1 创建
[root@localhost ~]# mkdir shell
[root@localhost ~]# cd shell
[root@localhost shell]# vi 1.sh

1.2 执行
1)第1种:
[root@localhost shell]# sh 1.sh

2)第2种:
首先赋予权限
[root@localhost shell]# chmod +x 1.sh
![]()
执行脚本
[root@localhost shell]# https://blog.csdn.net/2402_/article/details/1.sh

2.常用命令
2.1 查看脚本执行过程
[root@localhost shell]# bash -x 1.sh

2.2 查看脚本是否有语法错误
[root@localhost shell]# bash -n 1.sh

2.3 data命令
1)显示年月日
[root@localhost shell]# date +%Y-%m-%d
[root@localhost shell]# date +%F
[root@localhost shell]# date +%y-%m-%d

2)显示时间
[root@localhost shell]# date +%H:%M:%S
[root@localhost shell]# date +%T

3)显示一年中的第几周
[root@localhost shell]# date +%W

4)显示一周中的第几天
[root@localhost shell]# date +%w

3.shell脚本中的变量
3.1 变量和变量的格式
1)在shell脚本中使用变量会使我们的脚本更加专业,更像一门语言,所以我们编写脚本时,就可以使用变量来代替某个使用频繁并且长度很长的字符串
2)定义变量的格式为:“变量名=变量的值”
在脚本中引用变量时需要加上符号$



(两种方法)
3)数学运算要用[ ]括起来并在前面加符号$


3.2 和用户交互


3.3 shell脚本预设变量


在上例当中,$1、$2、$3从何而来呢?
这其实就是shell脚本的预设变量
在执行时输入1、2、3

$1就是脚本的第一个参数,$2就是脚本的第二个参数,以此类推,shell脚本的预设变量是没有限制的($0代表脚本本身的名字)
4.shell脚本中的逻辑判断
4.1 不带else
#!/bin/bash
read -p "请输入一个数字" a
if ((a<60))
then
echo "不及格"
fi

[root@localhost shell]# https://blog.csdn.net/2402_/article/details/1.sh

4.2 带有else
#!/bin/bash
read -p "请输入一个数字" a
if ((a<60))
then
echo "不及格"
else
echo "及格"
fi

[root@localhost shell]# https://blog.csdn.net/2402_/article/details/1.sh

4.3 带有elif
#!/bin/bash
read -p "请输入一个数字" a
if ((a<60))
then
echo "不及格"
elif ((a>=60)) && ((a<70));
then
echo "良好"
elif ((a>=70)) && ((a<80));
then
echo "优秀"
else
echo "超棒"
fi

[root@localhost shell]# https://blog.csdn.net/2402_/article/details/1.sh

4.4 嵌套


4.5 注意事项
在上述例子中可以看到我们使用的是(( )),除了使用(( ))还可以使用[ ],但是不能使用>、<、=这样的符号了要使用-lt(小于)-gt(大于)
-eq(等于)-ne(不等于),下面我们来做个表直观地感受一下
使用符号
小于
大于
等于
(( ))
>
<
Java shell运维脚本基础=
[ ]
-lt
-gt
-eq
4.6 if逻辑判断
if判断文件的目录属性
(判断是普通文件还是目录,是否有读、写、执行权限等)
常用选项:
-e:判断文件或目录是否存在
![]()
-d:判断是不是目录以及是否存在
![]()
-f:判断是不是普通文件以及是否存在
![]()
![]()
-r:判断是否有读权限
![]()
-w:判断是否有写权限
![]()
-x:判断是否可执行
![]()
4.7 shell中的case判断
在shell脚本中除了用if来判断逻辑外,还有一种常用方式——case


5.shell中的循环
5.1 for循环
1)基本结构
for 变量名 in 循环的条件;
do
command
done
3)循环的条件可以是一组字符串或者数字(用一个或者多个空格隔开),也可以是一条命令的执行结果,还可以引用系统命令的执行结果(但必须用反引号括起来)
2)举例
(脚本中的seq 1 5表示1到5的一个序列)

执行结果

5.2 while循环
1)基本结构
while 条件;
do
comand
done
常常用while循环来编写死循环的脚本,用于监控某项服务
2)举例1

执行结果

另外,可以用一个冒号来代替循环条件,这样可以做到死循环


6.shell中的中断与继续
在shell脚本循环的过程中,我们难免会遇到一些特殊需求,比如当循环到某个地方时需要做一些事情,这时候很可能需要退出循环,或者跳过本次循环,这样的需求如何实现呢?
6.1 跳出循环break
1)break用在循环中,不管是for或者while都可以,在脚本中使用它,表示退出该层循环。之所以说层,是因为有时我们会用到嵌套循环,大循环里面还有小循环,而break仅仅是退出那一层循环,它的上层循环不受影响。
2)举例
[root@localhost ~]# vi break.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if (( $i==3 ))
then
break
fi
echo $i
done
echo aaaaaa

执行结果
可以看到当i=3时,会跳出循环,后面的4和5都不会再执行了
[root@localhost ~]# https://blog.csdn.net/2402_/article/details/break.sh

6.2 结束本次循环continue
1)continue也是使用在循环中的,但和break不同的是,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环
2)举例
[root@localhost ~]# vi break.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if (( $i==3 ))
then
continue
fi
echo $i
done
echo aaaaaa

[root@localhost ~]# https://blog.csdn.net/2402_/article/details/break.sh

6.3 退出整个脚本exit
1)exit它的作用范围更大,就是直接退出整个shell脚本
2)举例
[root@localhost ~]# vi break.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if (( $i==3 ))
then
exit
fi
echo $i
done
echo aaaaaa

执行结果
[root@localhost ~]# https://blog.csdn.net/2402_/article/details/break.sh

7.shell中的函数
7.1 什么是shell脚本中的函数
1)shell脚本中的函数就是先把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时直接调用到这个小单元的名字即可
2)有时候脚本中的某段代码总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样不仅节省时间还节省空间
3)注意:在shell脚本中,函数一定要写到最前面,不能出现在中间或者最后。因为函数是要被调用的,如果还没有出现就被调用,肯定会出错
7.2 基本结构+各种例子
1)基本结构
function f_name()
{
command
}
2)举例
#!/bin/bash
function sum()
{
sum=$[$1+$2]
echo $sum
}
sum 1 2

执行结果
[root@localhost shell]# sh func.sh 1 2

3)打印出第一个参数、第二个参数、参数的个数及脚本
#!/bin/bash
input()
{
echo $1 $2 $# $0
#输出函数的第一个、第二个的参数:$1 $2
#输出参数的个数:$#
#输出脚本名:$0
}
input 1 a b

执行结果
[root@localhost shell]# https://blog.csdn.net/2402_/article/details/1.sh

4)获得一个网卡的ip地址
#!/bin/bash
ip()
{
ifconfig |grep -A1 "$1: " |tail -1 |awk '{print $2}'
}
read -p "Please input the eth name: " e
myip=`ip $e`
echo "$e address is $myip"

ip addr //查看网卡

//如果遇到这种情况需要安装一下net-tools

yum install -y net-tools

执行结果
[root@localhost shell]# https://blog.csdn.net/2402_/article/details/2.sh


8.shell中的数组
8.1 数组读取
首先定义一个数组
[root@localhost shell]# a=(1 2 3 4 5)
![]()
1)命令 echo ${a[@]} 读取数组中的全部元素
[root@localhost shell]# echo ${a[@]}

2)命令 echo ${#a[@]} 获取数组的元素个数
[root@localhost shell]# echo ${#a[@]}

3)命令 echo ${a[2]} 读取第三个元素(数组从0开始)
[root@localhost shell]# echo ${a[2]}

8.2 数组赋值
1)a[1]=100; echo ${a[@]} 替换指定的元素值
[root@localhost shell]# a[1]=100; echo ${a[@]}

2)a[5]=2; echo ${a[@]} 如果下标不存在则会自动添加一个元素
[root@localhost shell]# a[5]=2; echo ${a[@]}

3)a[7]=6; echo ${a[@]} 跳着添加元素时,中间未赋值的元素
不显示且无值
[root@localhost shell]# a[7]=6; echo ${a[@]}

8.3 数组的删除
1)命令unset a[1] 用于删除单个元素
[root@localhost shell]# unset a[1]


2)命令unset a 用于删除整个数组
[root@localhost shell]# unset a


8.4 数组分片
在进行实验操作之前,需要对一个数组进行赋值 a=(`seq 1 5`)
[root@localhost shell]# a=(`seq 1 5`)
![]()
1)命令echo ${a[@]:0:3} 表示从第一个元素开始,截取3个元素,并打印出来
[root@localhost shell]# echo ${a[@]:0:3}

2)命令 echo ${a[@]:0-3:2} 表示从倒数第3个元素开始,截取2个元素,并打印出来
[root@localhost shell]# echo ${a[@]:0-3:2}

8.5 数组替换
1)命令echo ${a[@]/1/100} 表示用100替换1,但不会保存替换,只是打印出来
[root@localhost shell]# echo ${a[@]/1/100}

2)命令a=(${a[@]/1/100}) 表示用100替换1,这种方法不仅可以打印出来还可以保存替换
[root@localhost shell]# a=(${a[@]/1/100})
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/10773.html