shell基础知识(超详细)

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]# ./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]# ./1.sh

4.2 带有else

#!/bin/bash

read -p "请输入一个数字" a

if ((a<60))

then

echo "不及格"

else

echo "及格"

fi

[root@localhost shell]# ./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]# ./1.sh

4.4 嵌套

4.5 注意事项

在上述例子中可以看到我们使用的是(( )),除了使用(( ))还可以使用[ ],但是不能使用>、<、=这样的符号了要使用-lt(小于)-gt(大于)

-eq(等于)-ne(不等于),下面我们来做个表直观地感受一下

使用符号

小于

大于

等于

(( ))

>

<

=

[ ]

-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 ~]# ./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 ~]# ./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 ~]# ./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]# ./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]# ./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})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值