超详细shell脚本编程快速入门

您所在的位置:网站首页 怎么使用shell命令 超详细shell脚本编程快速入门

超详细shell脚本编程快速入门

#超详细shell脚本编程快速入门| 来源: 网络整理| 查看: 265

文章目录 1.shell简介 1.1 什么是shell1.2 shell脚本1.3 运行shell脚本1.4 shell注释1.5 shell编写的基本步骤2.shell变量 2.1 命名变量2.2 使用变量2.3 变量类型2.4 变量操作3.shell字符串 3.1 字符串类型3.2 字符串操作4.shell数组 4.1 定义数组4.2 数组操作5.shell传递参数6.shell运算符 6.1 shell运算符种类6.2 算数运算符6.3 关系运算符6.4 布尔运算符6.5 逻辑运算符6.6 字符串运算符6.7 文件测试运算符7.shell编程中的命令 7.1 echo命令7.2 printf命令7.3 test命令8.shell流程控制 8.1 if else条件8.2 case条件8.3 for循环8.4 while循环8.5 until循环9.shell函数 9.1 定义函数9.2 参数定义10.shell重定向11.结尾

 

1.shell简介 1.1 什么是shell

什么是shell呢?shell是用C语言编写的程序,它是用户使用 Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。简单来说Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。也可以这样认为,linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互

1.2 shell脚本

shell脚本就是一种专门使用shell编写的脚本程序,它虽然没有C++、Java、Python等一系列高级语言功能强大,但是在服务器运维领域以及嵌入式开发领域,shell脚本具有举足轻重的地位。

shell脚本编程如同其他编程语言的一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以运行了,而linux下的shell种类众多,常用的用:

Bourne Shell(/usr/bin/sh或/bin/sh)Bourne Again Shell(/bin/bash)C Shell(/usr/bin/csh)K Shell(/usr/bin/ksh)Shell for Root(/sbin/sh)… …

在诸多linux发行版系统中,最常用的就是Bash,就是Bourne Again Shell,因为其能工提供环境变量以配置用户shell环境,支持历史记录、内置算数功能、支持通配符表达式等高效性能,将linux常用命令进行的简化,被广泛应用于Debian系列的linux发行版中。

1.3 运行shell脚本

运行shell脚本的方法有两种:

作为可执行程序运行作为解释器参数运行

shell脚本编写如下,并将其保存为test.sh,进入存放此文件目录

#!/bin/bash echo "Hello World"

当作为可执行程序运行时候

chmod +x test.sh # 赋予可执行权限 ./test.sh # 执行程序

在这里插入图片描述

当作为解释器参数运行时

/bin/sh test.sh # 执行命令 /bin/php test.php # 执行命令

在这里插入图片描述

1.4 shell注释

单行注释:和python注释相同,以#号开头作为单行注释

# 这是一个注释 # author:ohuohuoo # date:`date`

多行注释:如果在开发过程中,,遇到大段的代码需要临时注释起来,过一会儿又取消注释,可以将其定义为一个花括号的注释函数,也可以用多行注释

: testfile 1

显示command命令执行结果

echo `date` 1

echo命令还有其他使用规则,经常使用就可熟练掌握

7.2 printf命令

shell中的printf命令如同C语言中一样,调用格式也大抵相同,只是有一点点不同。与echo命令打印字符串不同的是,printf不会自动调价换行符号,可以手动添加

printf命令的语法:

printf format-string [arguments...] 1

参数说明:

format-string:格式控制字符串arguments:参数列表

举例如下

$ echo "Hello, Shell" # 输入 Hello, Shell # 输出 $ printf "Hello, Shell\n" # 输入 Hello, Shell # 输出

printf命令可以较为强大的使用转义字符,shell中常用的转义字符如下表示所示

序列说明\a警告字符,通常为ASCII的BEL字符\b后退\c抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略\f换页(formfeed)\n换行\r回车(Carriage return)\t水平制表符\v垂直制表符\一个字面上的反斜杠字符\ddd表示1到3位数八进制值的字符。仅在格式字符串中有效\0ddd表示1到3位的八进制值字符 7.3 test命令

shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

数值测试命令表

参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真

应用举例如下

#!/bin/bash num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!' else echo '两个数不相等!' fi

输出结果

两个字符串不相等! 1

字符串测试表

参数说明=等于则为真!=不相等则为真-z 字符串字符串的长度为零则为真-n 字符串字符串的长度不为零则为真

脚本实例如下

# !/bin/bas num1="name" num2="function" if test $num1 = $num2 then echo '两个字符串相等!' else echo '两个字符串不相等!' fi

输出结果

两个字符串不相等! 1

文件测试表

参数说明-e 文件名如果文件存在则为真-r 文件名如果文件存在且可读则为真-w 文件名如果文件存在且可写则为真-x 文件名如果文件存在且可执行则为真-s 文件名如果文件存在且至少有一个字符则为真-d 文件名如果文件存在且为目录则为真-f 文件名如果文件存在且为普通文件则为真-c 文件名如果文件存在且为字符型特殊文件则为真-b 文件名如果文件存在且为块特殊文件则为真

脚本编写如下

# !/bin/bash if test -e ./bash then echo '文件已存在!' else echo '文件不存在!' fi

输出结果如下

文件已存在! 1 8.shell流程控制

shell作为一种脚本语言,也有着自己的流程控制,而shell中的流程控制主要由条件、循环组成

8.1 if else条件

shell中的if else条件具有一定的模版。其调用格式为:

if - then - fi:

调用格式如下

if condition then command1 command2 ... commandN fi # 写成单行 if condition;then command1; command2;fi

如果存在不满足的条件的情况

if condition then command1 command2 ... commandN else command fi

在多层嵌套条件情况

if condition1 then command1 elif condition2 then command2 else commandN fi

应用举例

num1=$[6] num2=$[8] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi

执行脚本,结果输出如下

两个数字相等! 1 8.2 case条件

shell中case语句为多功能选择语句,与其他语言相通的是,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句调用格式如下:

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

需要注意的点:

取值后面需要加上in每一模式必须以右括号结束每个模式结束后使用;;符号结尾如果没有找到对应的模式。以*结尾,并跳出casecase需要搭配esac结尾,与C语言中的switch … case语句类似

脚本举例如下

echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read num case $num in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac

执行脚本,运行如下

输入 1 到 5 之间的数字:4 你输入的数字为 4! 输入 1 到 5 之间的数字:8 你输入的数字不是 1 到 5 之间的! 游戏结束

case中想要跳出循环有两个命令:break和continu

break命令:允许跳出所有循环(中止执行后面所有的循环)

使用举例

#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read num case $num in 1|2|3|4|5) echo "你输入的数字为 $num!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done

执行输出如下

输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束

contimue:shell中的continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。这一点和其他类型的语言相同

应用举例,同样的将上式修改如下

#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read num case $num in 1|2|3|4|5) echo "你输入的数字为 $num!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done

执行脚本,结果输出如下在这里插入图片描述

8.3 for循环

shell中的for循环调用格式和python中的for循环有点类似,也是有模板的:

for var in item1 item2 ... itemN do command1 command2 ... commandN done # 写成一行同样使用分号将语句分开

需要注意的是:

in列表中可以包含替换、字符串和文件名等in列表是可选的,如果默认不适用,将会循环使用命令行中的位置参数

应用脚本编写如下

for num in 1 2 3 4 5 do echo "The value is: $num" done

输出结果如下

The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5

在这里插入图片描述

8.4 while循环

shell中的while循环用于不断执行一系列命令,也用于从输入文件中读取数据,调用格式如下

while condition do command done

应用脚本编写如下:

#!/bin/bash num=1 while(( $num


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3