本文介绍: 脚本是由一系列shell命令组合起来,并且加入一定的控制语句之后形成的一个文本,就可以称为脚本。脚本最大的优点就是可以去代替人工去重复执行某件事情。当执行脚本的时候shell解释器就会逐行翻译命令,并将结果提交内核内核接收结果之后,就会去驱动硬件进行响应,因此脚本就是一门解释型的语言本质是多条shell命令有序集合可能加入定量控制结构语句)。

1、shell脚本是什么

        脚本是由一系列shell命令组合起来,并且加入一定的控制语句之后形成的一个文本,就可以称为脚本。脚本最大的优点就是可以去代替人工去重复执行某件事情。当执行脚本的时候shell解释器就会逐行翻译命令,并将结果提交给内核内核接收到结果之后,就会去驱动硬件进行响应,因此脚本就是一门解释型的语言本质是多条shell命令有序集合可能加入定量控制结构语句)。

2、脚本的编写格式步骤

1)创建一个.sh文件后缀为.sh文件一般就是shell本文件)

2)打开.sh文件(vim编辑),首行输入引用  #! /bin/bash(相当于引用bash内核解释编写的脚本)

3)按照规定的语法进行编写

4)编写完成保存,并且给.sh文件加可执行权限(chmod u+x 文件名.sh)

5)./文件名.sh(执行脚本)

3、脚本的语法

1)脚本中变量定义:脚本中的所有数据类型称为“弱类型”,及在脚本编写过程中,所有的变量没有数据类型的区分。

2)自定义变量

定义方法        变量名       (只需写变量名就好,建议大写

变量赋值        变量名=值   (等号前后不能有空格,紧挨着写)

引用:                &{变量名} 或 &变量名 (带大括号比较安全,不带大括号的话如果变量后还有字符,则会不识别变量,会认为是个新的变量名,建议带大括号,这样不容易出错

3)位置变量

概念:变量的值可以从命令行传入。

使用命令行输入 ./test.sh 5 10

#! /bin/bash

#位置变量为 $N(N是数字,从0开始)
echo $1

则会打印5,$0为./test.sh,当然$2就为10

4)系统预定义变量

概念系统之前规定将$符号指定的另外一个字母两者相结合,之后具备一定的含义。

$#:统计命令行参数个数(有效参数个数,不包含可执行文件名字,及不包含上方中的$0,从下一个有效的参数开始,执行语句默认无效

$@:统计传入的参数本身(也是有效参数

$*:统计传入的参数本身(也是有效参数用法与$@差不多)

$?:获取一条命令退出状态状态数值不是0就是1(0代表一条命令时成功执行,反之为失败执行)

5)环境变量

查看系统中的所有环境变量shell命令:env

操作

添加环境变量:

              export 变量名=值 (可以一次赋值多个,多个数之间以冒号隔开)

修改环境变量值

              export  变量名=新值:${变量名} (想在旧变量之前加参数) 

              export  变量名=${变量名} :新值 (想在旧变量之后加参数

清除环境变量:

              unset 变量名

!!!当然环境变量谨慎修改!!!

4、脚本的语句

1)说明性语句

凡是以#开头的语句都是说明性语句,可以理解注释

2)功能性语句

2-1动态获取变量的值

命令:read读取键盘输入的值,功能类似于C语言中的scanf函数功能

方式

     read  变量名1  变量名2  。。。   变量名 (若变量未定义,则默认定义新变量且赋初值)

提示语句的写法

  1. 方式1:通过echo  “提示语句”
  2. 方式2:使用read的同时去打印:read  –p提示语句”  变量名​​​​​​​
#! /bin/bash 
#方法echo "请输入二个值:" 
read NUM1 NUM2 

#方法read -p "请输入两个值" NUM3 NUM4

 2-2通配符的转义

通配符解释:大概理解就是通用的字符,可以代替任意字符

1、软转义

        在这块即了解双引号加与不加的区别,在大多时候,两者其实没有多大的区别,但是又不完全相同,举例如

#! /bin/bash

#举例1
echo "河流   77"

#举例2
echo  河流   77

 举例一的输出结果即为 河流    77

举例二的输出结果即为 河流 77

若不加双引号则会将多个空格缩减为一个空格,反之则会将空格原样输出

2、硬转义

        单引号 与 ”“ 称为硬转义,在打印输出时,硬转义符号遇到变量${变量名}或者命令时,不会去把他们当作变量和命令。而是当作一个字符串去输出

 

2-3 expr算术运算命令 

        功能实现加、减、乘、除、取余

使用方法

        expr 变量名1 运算符 变量名2(其中每个字段之间至少需要保留一个空格) 

2-4测试命令test

         功能:代替判断语句,例如C语言中的if

测试格式 

        1、[(空格)对象一  测试条件 对象二(空格)] (中括号两个对象之间必须至少有一个空格)

        2、test 对象1 测试条件 对象2

1、对于整型测试测试对象假设为${num1} 、${num2})

 

#! /bin/bash

#等于
test ${num1} -eq ${num2}
#不等于
test ${num1} -ne ${num2}
#大于
test ${num1} -gt ${num2}
#大于等于
test ${num1} -ge ${num2}
#小于
test ${num1} -lt ${num2}
#小于等于
test ${num1} -le ${num2}

2、对于字符串测试测试对象假设为${str1} 、${str2})

#! /bin/bash

#等于
[ ${str1} = ${str2} ]
#不等于
[ ${str1} != ${str2} ]
#字符串长度为0
[ -z ${str1} ]
#字符串长度不为0
[ -n ${str2} ]

 3、对于文件属性测试(测试对象假设为${f1} 、${f2})

#! /bin/bash
#-f :测试对象是否存在且为普通文件
[ -f ${f1} ]
#-d :测试对象是否存在且为目录文件
[ -d ${f1} ]
#-L :测试对象是否存在且为软链接文件(符号链接文件)
[ -L ${f1} ]
#-r:测试对象是否存在且具备可读权限
[ -r ${f1} ]
#-w:测试对象是否存在且具备可写权限
[ -w ${f1} ]
#-x:测试对象是否存在且具备可执行权限
[ -x ${f1} ]
#-s:测试对象的大小
[ -s ${f1} ]
#f1  -nt  f2:测试f1是否比f2更新(文件最后一次保存时间)
[ f1 -nt f2 ]
#f1  -ot  f2:测试f1是否比f2更旧(文件最后一次保存时间)
test f1 -ot f2

5、结构性语句 

        一般主要分为顺序结构选择结构循环结构 

1、选择结构

(1)if语句

#if语句的使用
#if多路分支
if 测试语句
then
    命令表
elif 测试语句
then
    命令表
else
    命令表
fi

(2)case语句

#case的使用
case 变量值 in
    模式1)
        命令表
        ;;
    模式2)
        命令表
        ;;
    模式3)
        命令表
        ;;
    *)
        命令表
esac

6、循环结构 

1、for循环(两种风格都可以使用)

#sehll风格
for 变量名 in 参数列表
do
    命令1
    命令2
    ...
    命令N
done


#类似C风格

for(i = 0 ; i< 10 ; i++)
{
    命令表
}

2、while循环 

#while循环的使用
while 条件判断
do
    命令表
done

#while循环
while [ true ]
do
    命令表
done

 

 

原文地址:https://blog.csdn.net/u011574457/article/details/130016943

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_33042.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注