Shell脚本(一)第十三天

shell概述

1、shell是一个用c语言编写的程序它是用户使用Linux的桥梁。

2、shell即是一个一种命令语言,又是一种程序设计语言。

3、shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务

Ken Thompson 的 sh 是第一种 unix shell 。

脚本和环境

shell脚本

       shell脚本(shell script),是一种为shell编写的脚本程序。(其实就是一个文件,只不过这个文件可被执行)

shell环境

       shell编程只要有一个能编写代码的文本编辑器vi和一个能解释执行的脚本解释器就可以了。/bin/bash

Linux的shell种类众多,常见有:

Bourne Again shell

1、由于易用和免费,bash在日常中广泛使用。

2、bash也是大多数Linux系统默认的shell。

shell脚本是做什么的?

将许多命令写在一起,让用户很轻松的就能执行一个文件的shell脚本,就能够一次执行多个命令。

shell构成

bash环境配置文件

.bash_profile

      设置环境变量

      账户——建立,该文件就存在

.bashrc

       存放针对bash的命令

     每次启动就执行它

     在.bash_profile之后执行

.bash_logout

      仅在退出注册时运行

.bash_history

      历史记录

shell脚本编写

格式:vi filename.sh

例:写一个test.sh,输出“helloworld”

使用vi来编写shell脚本

脚本第一行格式:

             #!/bin/bash

             符号#!用来指定该脚本文件的解析程序,这里使用的是bin目录下的bash解析器。

             当编辑好脚本后,如果要执行该脚本,还必须使其具有可执行属性。

脚本编写完成后,解析方式:
解析方式一

chmod +x  脚本文件的名字

./脚本文件的名字

解析方式二(重点掌握)

/bin/bash 脚本文件的名字

shell中的变量

在shell脚本中,变量有两种,一种是用户自定义变量,另一种是系统默认变量。

注意,变量名和等号之间不能有空格。

变量名的命名必须遵循如下规则:

         首个字符必须为字母(a-z  A-Z)

         中间不能有空格,可以使用下划线(_)

         不能使用标点符号

         不能使用bash里的关键字(关键词)

关键字(关键词):指在当前操作中有特殊含义的一些词  

1、变量的声明(创建):变量名+变量值

x=2

your_name="ljx"

变量声明完成后,如何使用每个变量里面存储的值?

2、变量的使用:$变量名

格式二:${变量名}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

3、输出:   echo $变量名

只读变量:只能读取,不能修改

格式:readonly 变量名

删除变量

使用unset命令可以删除变量。

语法:  unset 变量名

变量被删除后不能再次使用。unset命令不能删除只读变量

字符串操作

字符串:一般是由多个字符构成,用双引号引起来“abc”

字符:一般是由单个字符构成,用单引号引起来‘a’

1、拼接字符串:将两个字符串拼接在一起

name=“ljx”

pj1="hello,"$name"!"

pj2="hello,${name}!"

echo  $pj1  $pj2

2、获取字符串长度:看一个字符串由多少个字符构成

string="abcd"

echo  ${#string}

注意:符号,空格也算作一个字符

3、提取子字符串

例:从字符串第2个字符开始截取4个字符:

string="asddfgghj"

echo ${string:1:4}

注意:字符串的截取工作是根据每个字符的下标来完成的,下标都是从0开始的

shell数组

数组:相当于多个相同类型的变量组成的集合,没有限定数组的大小

定义数组

格式:数组名=(值1 指 值3…)

读取数组

格式:${数组名[下标]}

例如:valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如

echo ${array_name[@]}

获取数组的长度

1、取得数组元素的个数

lengh=${array_name[@]}

2、取得数组单个元素的长度

lenghn=${#array_name[n]}
 

shell注释

以"#"开头的行就是注释,会被解释器忽略。

sh里没有多行注释,只能每一行加一个#号

shell基本运算符

算数运算符

假定变量a为10 ,变量b为20

运算符      说明     举例

+                   加法       `expr $a + $b`  结果为30

-               减法     `expr $a - $b`  结果为-10

*               乘法     `expr $a \* $b`  结果为200.  转义字符。

/                    除法     `expr $b / %=$a`  结果为2

%              取余     `expr $b % $a`  结果为0.

=              赋值      a=$b  将把变量b的值赋给a。

==                 相等      用于比较两个数字,相同则返回true。[$a == $b]返回false.

!=             不相等     用于比较两个数字,不相同则返回true。[$a !=$b]返回true。

expr是一款表达式计算工具,使用它能完成表达式的求职操作。

使用格式:`expr 数值1  运算符号   数值2`

乘法* 在expr工具中,无法直接将*当做乘法看待

转义字符格式:\字符

两个数相加(注意使用的是反引号`而不是单引号'):
#!/bin/bash

val=`expr 2 + 2`

echo "sum:$val"

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

假定变量a为10,变量b为20:

运算符     说明                                                    举例

-eq             检测两个数是否相等,相等返回true。   [$a -eq $b] 返回false

-ne             检测两个数是否相等,不相等返回true。 [$a -ne $b]返回true

-gt         检测左边的数是否大于右边的,如果是则返回true。  [$a -gt $b]返回true。

-lt              检测左边的数是否小于右边的,如果是则返回true。   [$a -lt $b]返回true

-ge         检测左边的数是否大于等于右边的,如果是则返回true。

[$a -ge $b]返回false

-le          检测左边的数是否小于等于右边的,如果是则返回true。  [$a -le $b]返回true

布尔运算符

假定变量a为10,变量b为20:
运算符     说明               举例

!           非运算,表达式为true则返回false,否则返回true。  [!false]返回true

-o          或运算,有一个表达式为true则返回true。  [$a -it 20 -o $b -gt 100]返回true

-a          与运算,两个表达式都为true才返回true。    [$a -lt 20 -a $b -gt 100]返回false

逻辑运算符

假定变量a为10,变量b为20

运算符   说明               举例

&&           逻辑的AND       [[$a -lt 100 && $b -gt 100]]返回false

||           逻辑的OR      [[$a -lt 100 || $b -gt 100]]返回true

字符串运算符

假定变量a为"abc",变量b为"efg":
运算符   说明                                                      举例

=            检测两个字符串是否相等,相等返回true。 [$a = $b]返回false

!=           检测两个字符串是否相等,不相等返回true。   [$a != $b]返回true

-z           检测字符串长度是否为0,为0返回true。   [ -z $a ]返回false

-n           检测字符串长度是否为0,不为0返回true。   [ -n $a] 返回true

str         检测字符串是否为空(null),不为空返回true。  [$a]返回true

文件测试运算符

文件测试运算符用于检测文件的各种属性。

-d file   检测文件是否有目录,如果是,则返回true。  [-d $file ]返回false

-f file  检测文件是否是普通文件,如果是则返回true。    [-f $file ]返回true

-r file 检测文件是否可读,如果是则返回true。    [ -r $file ]返回true

-w file 检测文件是否可写,如果是则返回true.    [ -w $file]返回true

-x file  检测文件是否可执行,如果是,则返回true。  [-x $file]返回true

-s file  检测文件是否为空(文件大小是否大于0),不为空返回true。   [-s $file]返回true

 -e file  检测文件(包含目录)是否存在,如果是,则返回true。  [-e $file]返回true

shell echo命令

作用:用于字符串的输出  

格式:echo  "字符串内容"

1、显示转义字符

echo"\"It is a test\""

2、显示变量

read 命令 从标准输入中读取一行,并把输入行的每个字段的值指定给shell

变量

#!/bin/bash

read name

echo "$name It is a test"

3、显示换行

echo -e "OK!\n"# -e 开启转义

echo "It is a test"

4、显示不换行

#!/bin/sh

echo -e "OK!\c" # -e  开启转义\c 不换行

echo "It is a test"

5、显示结果定向至文件

echo "It is a test" > myfile

6、显示命令执行结果

echo`date`

注意:这里使用的反引号`,不是单引号’。

常见的转义字符

\b  后退(清除前一项数据)

\n  换行(相当于回车)

\t  水平制表符(Tab键)

\\  反斜杠字符----->\( )

shell printf命令

输出

格式:printf   格式声明   与格式声明相对应的参数列表

格式声明由两部分组成:百分比符号(%)和指示符

%d %s %c %f 格式替代符:
d:date 数字 -- 对应位置参数必须是数字型

s:str 字符串 -- 对应位置参数必须是字符串

c:char 字符 -- 对应位置参数显示对应参数的第一个字符

f:float 浮点 -- 对应位置参数必须是数字型

printf "%-10s %-8s %-4s\n"   name sex kg

printf "%-10s %-8s %-4.2f\n"   qwer yiy 87.234

%-10s指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),

任何字符都会显示在10个字符宽度的字符内,

如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中.2指保留2位小数。

 printf具有自动划分的操作,当传递过来的内容过多的时候,会根据格式来自动划分显示                                  

shell test命令------>[ ]

shell中的test命令用于检查某个条件是否成立。它可以进行数值、字符、文件三个方面的测试。(能和运算符最结合,进行判定工作)

数值测试

参数     说明

-eq         等于则为真

-ne         不等于则为真

-gt          大于则为真

-ge         大于等于则为真

-lt          小于则为真

-le          小于等于则为真

 例:判断两个数是否相等

num1=100

num2=100

if test $num1 -eq $num2

then

    echo '两个数相等!'

else

    echo '两个数不相等!'

fi

数值运算第二种运算方式(推荐使用)

格式:$((运算表达式))

数值运算的这种写法,对括号内的表达式求值,这样声明了一个整型数数据。

注意:

(1) 自定义变量赋值时,"="左右两边都不能有空格。

(2) BASH中的语句结尾不需要分号。

(3)若变量内容由用户决定,可以使用"read"命令从终端键盘获取用户的输入值。

字符串测试

参数     说明

=           等于则为真

!=          不相等则为真

例:判断两个字符串是否相等

num1="qweqwe"

num2="asdasd"

if test $num1 = $num2

then

    echo '两个字符串相等!'

else

     echo '两个字符串不相等!'

fi

文件测试

参数    说明

-e         如果文件存在则为真

-r          如果文件存在且可读则为真

-w        如果文件存在且可写则为真

-x         如果文件存在且可执行则为真

-s         如果文件存在且至少有一个字符则为真

-d        如果文件存在且为目录则为真

-f         如果文件存在且为普通文件则为真

例:判断文件是否存在

cd /root

if test -e 1

then

    echo 'yes!'

else

    echo 'no!'

fi

在判断条件中,如果出现与(-a)或(-o) 非(!),优先级顺序为非(!)最高,与(-a)第二,   非(-o)最后。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值