欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Shell脚本语法篇

程序员文章站 2022-07-12 12:35:05
...

一:条件测试
1:条件测试:命令test或者是 [ 但是 [ 通常与 ] 一起是使用
Shell脚本语法篇
我们再来看看结果:
Shell脚本语法篇
要分析这种现象必须的明确几个概念,在Shell中,一切都是指令,而test和[是起到条件判断的作用,在C语言中我们会根据返回值来判断条件语句是否成立,在Shell中我们是根据退出来判断条件语句的成立与否,这点和进程和线程十分相像,通常我们规定正常退出退出码为0(条件为真),否则(条件为假)退出码为其他整数.
我们观察到右几个特殊的符号好像起到判断额作用,我们来揭秘,
-lt表示小于(little)
-gt表示大于(great)
-le表示小于等于(little and equle)
-ge表示大于等于(great and equle)
那么$?一般表示最新的退出码
为了方便记忆,我们一般去其英文单词的首字母,这样就不会弄混了.
当然如果我们不知道该目录下文件的类型,我们也可以用条件语句去测试,常见的文件类型有-b块设备,-p管道等等,有兴趣的小伙伴可以自己去测试一下.

2:与C语言类似可以做与,或,非的逻辑运算.
Shell脚本语法篇
结果:
Shell脚本语法篇
和C语言类似,!表示非,&&或者 -a(and)都表示与,表明两个条件为真才为真,退出码为1表示条件不成立.-o(other)或者||表示或的关系,至少有一个成立.

3:分支语句
if/then/elif/else/fi和C语言很类似,elif表示else if语句.fi表示条件终止

Shell脚本语法篇
结果:
Shell脚本语法篇
我们看到一个奇怪的字符冒号 : 在Shell脚本中表示条件一直为真,这样,如果在某些条件下写死循环,可以这样写if : 注意Shell脚本中一切皆命令,带空格表示命令,不带空格,表示是前面命令的参数.

4:cast语句
在C语言中我们还有一种语句表示分支就是switch case,那Shell脚本中如何写呢?
我们以一个例子来分析:
Shell脚本语法篇
结果:
Shell脚本语法篇
我们发现.Shell脚本下case语句和C语言的格式还是一样的,只是这里面都是用指令替代了某些语句,比如beak脚本下用;;,default用*)表示,当然case语句结束用esac来标识,刚好反过来.
当然有对脚本感兴趣的小伙伴还可以进入
/ect/init.d的文件下查看
Shell脚本语法篇
case语句的其他用法
Shell脚本语法篇

二:循环语句:
我们先看for循环和while循环:前面我们也知道(())在内括号里面可以进行表达式的运算和C语言类似
第一种:类C的写法:
for/do/done
Shell脚本语法篇
第二种:for in/do/done
Shell脚本语法篇
第三种:untile循环.类似C语言的do..while循环
Shell脚本语法篇
第三种:while/do/done
Shell脚本语法篇
三:Shell脚本位置参数和特殊变量
如下的栗子:
Shell脚本语法篇
输出结果:
Shell脚本语法篇
我们发现
0Shell.1,2,3分别表示命令行参数,有点像C语言的argv[1].argv[2],argv[3]
?退,@表示 参数列表1,2…;$$表示当前Shell的进程号.
$# 相当于C语⾔言main函数的argc - 1,注意这⾥里的#后⾯面不表⽰示注释

四:函数:
和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表,函数体左花括号{},如果将最后一条命令和花括号}写在同一行,命令末尾必须有:号
格式如下:
Shell脚本语法篇
当然有的时候我们不用加function来标识.
可能大家会觉得奇怪在,C语言中我们可以给函数传参数,那么Shell脚本中如何传参数呢?
我们想到了命令行参数
fun 1 ‘string’ 3.14
Shell脚本语法篇
结果:
Shell脚本语法篇
我们知道Shell是弱类型的,因此可以在参数中输出其他的类型.
函数返回值:
Shell脚本语法篇
一定也区分清:retuen 和echo的区别,前一个表示是退出码,后一个表示输出结果.

五:函数调试:
我们知道在windows下我们可以用监视窗口来调试,在Linux下我们也可以用GDB,那么Shell脚本如何调试呢?
我们有一下的方法:
一:是在命令行提供参数
$sh-x./1.sh
二:是在脚本开头提供参数

#!/bin/sh-x

第三种方法是在脚本中用set命令启用或禁用参数
set-x和set+x分别表示1和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试
我们以第二种方式为例:
Shell脚本语法篇
如下:每次执行,都会打印执行的过程
Shell脚本语法篇
六:数组
Shell脚本支持以为数组,并没有相纸数组的大小,与C语言类似,数组元素小标也是从0开始,获取数组的元素要利用下标,下标可以是是整数或算数表达式,其值应大于或等于0.

定义数组的格式:
arr=(val1…valn)
记住元素之间用”空格”符号分割开.
读取数组元素值的一般格式是:
${arr[index]}
使用@或*可以获取数组中的所有元素,例如:
Shell脚本语法篇
结果:
Shell脚本语法篇
关于Shell脚本的语法学习先总结到这,当然还有其他的下次再说.

相关标签: shell 脚本