Shell脚本语法篇

来源:互联网 发布:卫卫网域名怎么备案 编辑:程序博客网 时间:2024/05/16 12:06

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

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

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

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

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

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

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

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

#!/bin/sh-x

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

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支付宝付款刷脸怎么办 考到了差的中学怎么办 中学考高中没考上怎么办 如果考中学没有考上那怎么办 摩托车牌京b牌照怎么办 老公网贷还不了怎么办 丈夫欠下的债妻子怎么办 丈夫偷妻子的钱怎么办 刷信用卡显示不允许降级交易怎么办 每次月经头几天下不来怎么办 邮箱和安全问题都忘记了怎么办 大疆air无人机芯片过热怎么办 脸上反复冒痘痘闭口粉刺怎么办? 手被火烧伤起泡怎么办 手被打火机烧了怎么办 小孩手被火烧了怎么办 手指被火烧伤了怎么办 别人砸坏我家门怎么办 逆水寒经验满了怎么办 tcl魔环显示离线怎么办 城管执法局执法不公平怎么办 人被骗去搞传销怎么办 进了传销想出来怎么办 武汉江夏健康证怎么办 健康证条子掉了怎么办 送外卖的健康证怎么办 美团没有健康证怎么办 健康证不给补办怎么办 南京怎么办健康证去哪里办 浙江横店健康证怎么办 办健康证查乙肝怎么办 餐饮健康证丢了怎么办 办健康证吃了东西怎么办 吃宵夜脸肿了怎么办 晚上不吃宵夜饿了怎么办 办健康证身份证丢了怎么办 宁波二院怎么办健康证 健康证和培训证怎么办 楼下烧煤炉呛人怎么办 衣服染了笔渍怎么办 济宁二院怎么办健康证