赞
踩
目录
学习Linux的Shell脚本、查看内核模块
if 语句是最简单的判断结构,它对条件进行判断,如果判断结果为真,则执行下面的命令,其判断格式有两种形式:
- if expression
- then
- 命令语句
- fi
或者
- if expression; then
- 命令格式
- fi
在上述格式中,expression表示条件表达式,如果expression后面没有“ ; ”符号,则then要另起一行,若有“ ; ”符号,则then要与expression处于同一行,expression后面要用“ ; ”符号隔开,且中间要有一个空格。最后的fi表示判断结构结束。
例如:编写一个脚本chapter1.sh,判断在当前目录下是否存在一个名为name.yaml的文件
进入编辑
编辑内容,保存退出
执行
if / else结构指如果满起条件,则执行then后面的操作:如果不满足条件,则执行else后面的操作。例如,判断一个数是否等于100,如果等于,则执行then后面操作;如果不等于,则执行else后面的操作。
if / else结构的格式
- if expression
- then
- 命令格式1
- else
- 命令格式2
- fi
在上述格式中,如果expression条件为真,则执行“ 命令语句1 ”,否则执行“ 命令语句2 ”。当然,then也可以与expression在同一行,使用“ ; ”符号分隔开。
例如:编写一个脚本chapter3.sh,用于从键盘读取用户输入的字符串,如果字符串为空,则输出为空;如果字符串不为空,则输出字符串
进入编辑,保存退出
执行
如果没有输入直接回车得到的结果为
if / elif / else 结构可以进行多种情况的判断。例如,对一个学生的成绩进行判断,如果大于90分则为A,否则判断是否大于80;如果大于80分则为B,否则再判断是否大于70分;如果大于70分则为C,否则为D。
if / elif / else 结构的格式
- if expression1; then
- 命令语句1
- elif expression2; then
- 命令语句2
- elif expression3; then
- 命令语句3
- ...
- else
- 命令语句 n
- fi
在上述语法格式中,如果expressionl条件不成立,则直接进行expression2条件的判断;如果expression2条件不成立,则直接进行expression3条件的判断;以此类推,直到条件表达式成立,执行相应的命令语句,或者直到所有的条件都判断完毕,所有条件都不成立,则执行else后面的命令语句。
例如:编写一个脚本chapter4.sh,从键盘读取学生成绩,判断学生成绩级别
进入编辑,保存退出
执行
case 结构也用于进行判断,只是它的判断条件只能常量或正则表达式,
语法格式
- case "$var" in
- var1)
- 命令语句1;;
- var2)
- 命令语句2;;
- ...
- *)
- 命令语句n;;
- esac
在上述语法格式中,var变量会与varl、var2、……逐一进行比较,如果var与varl匹配,则执行命令语句1,然后跳转到esac结束语句;如果var与var2匹配,则执行命令语句2,然后跳转到esac结束语句;如果所有的变量都没有匹配成功,则会匹配“ * ”符号,执行它后面的命令语句n,然后接着执行esac结束语句。
例如:编写一个脚本chapter5.sh,让用户输入一个整数值,根据输入的整数值判断是周几
进入编辑,保存退出
执行
for 循环是Shell编程中最常用的循环,它通常从一个列表中读取元素赋予变量,然后执行循环体中的命令语句,执行完毕之后再次从列表中读取元素赋予变量,再次执行循环体中的命令语句,如此循环,直到列表中的元素被读取完毕,
语法格式
- for var in {list}
- do
- 命令语句
- done
在上述语法格式中,for var in {list} 是循环条件,do··done之间是循环体。for循环在执行时,会从列表中取第一个元素赋予var变量,执行循环体中的命令语句;接着从列表中读取第二个元素赋予var变量,执行循环体中的命令语句,直到列表中的值被读取完毕,循环结束。
例如:编写一个脚本chapter6.sh,循环输出1~5这5个数值
进入编辑,保存退出
执行
在for循环中,如果列表中的元素是连续的整数,则中间可以使用省略 chapter6.sh脚本中循环列表还可以写成如下形式 :
在for循环中的列表还可以按步长进行跳跃,例如,列表中元素是1~100,每次只读取奇数,则可以2为步长跳跃读取,代码如下所示:
Shell中的for循环,除了使用列表外,还有类似C语言风格的for循环,格式如下所示:
- for((expression1; expression2; expression3))
- do
- 命令执行语句
- done
expression1是初始化表达式,expression2是循环条件,expression3是操作表达式。它们的执行过程与C语言的for循环是相同的。由于C语言风格的for循环只适用于次数已知的循环,而且不适用于字符串、文件作为变量的循环,因此它在Shell编程中较少使用,此处不再赘述。
与for循环相比,while 循环要简单一些。它只有一个判断条件,如果条件为真,则执行循环体中的命令语句;如果条件为假,则退出循环。
循环格式
- while expression
- do
- 命令格式
- done
上述语法格式中,如果 expression 为真,则执行循环体;如果为假,则退出循环。在循环执行过程中,必须要有退出循环条件以避免陷入死循环。
例如:编写一个脚本chapter7sh,循环输出1~5这5个数值
进入编辑,保存退出
执行
例如:编写脚本chapter8sh,使用while循环输出当前目录下的所有文件,要从命令行传递参数
进入编辑,保存退出
执行
until循环的格式与while循环类似,但在判断循环条件时,只有循环条件为假才会去执
行循环体;如果循环条件为真,则退出循环,
语法格式
- until expression
- do
- 命令格式
- done
在上述语法格式中,直到expression条件成立才会退出循环,这一点与for循环、while循环正好是相反的,读者要尤其注意。
例如:编写脚本chapter9.sh,使用until循环输出1~5这5个数值
进入编辑,保存退出
执行
break用于强行退出循环,它会忽略循环条件的作用,退出循环之后,它接着执行循环之外的命令。break可以用在for循环、while循环、until循环中
例如: 编写脚本chapter10.sh,当num变量值为3时,退出循环
进入编辑,保存退出
执行
由输出结果可知,脚本只输出了1、2、3这3个数值,当num变量值为3时,break循环控制符强行退出了循环,退出循环之后,脚本又执行了循环之外的echo命令。需要注意的是,如果脚本中有多层循环,则break只能退出本层循环,无法退出外层的循环。
continue 用于终止本次循环,接着执行下一次循环,它不会退出循环,只是跳过本次循环,循环会按照循环条件正常退出。
例如:编写一个脚本 chapter12.sh,输出1~50内可以被5整数的数
进入编辑,保存退出
执行
lsmod 命令可以列出目前系统中已经加载的所有模块,这个命令没有任何参数,直接执行即可
例如
...
以上命令执行后打印的内核模块信息分为3列:第一列Module表示模块名称,第二列Size 表示模块占用内存大小(字节),第三列Used by声明模块是否被其他程序使用。如果第三列为0,则表明没有程序在使用这个模块,它可以随时被卸载;非0则表明有程序在使用它。例如fuse模块,Used by的值为3,表示有3个程序在使用这个模块,它就无法被卸载。
如果要查看具体某一个模块是否被加载,可以使用如下命令:
lsmod | grep 模块名
如果模块被加载了,那么它会显示出模块的各项信息;如果模块没有被加载,则不会输出任何信息。
例如:查询一个已经被加载过的模块btusb,它会输出模块名、模块大小和被占用情况
例如:下面再查询一个没有被加载的模块,如vfat模块,它用于处理长文件名
命令执行后没有输出任何,表明模块vfat未被加载。
Linux 提供了modinf 命令来看内核模块信息,
命令格式
modinf [ 选项 ] 模块名
选项 | 说明 |
---|---|
-a | 显示模块开发人员信息 |
-d | 显示模块的使用说明 |
-l | 显示模块遵循的规范,都遵循GPL规范 |
-h | 显示帮助信息 |
-p | 显示模块所支持的参数 |
-V | 显示模块版本信息 |
用不同的命令行参数可以查看模块的相应信息,如果在查看模块时没有使用任何选项,则会输出关于这个模块的所有信息。
例如,查看sg驱动模块,这个模块能够将SCSI命令直接发送给相应设备并获得返回信息
这里显示了sg模块的全部信息,包括作者、版本、遵循GPL规范、使用说明等。
modprobe 命令不仅可以动态加载模块,通过modprobe 命令加载、卸载模块时,
命令格式
modprobe [ 选项 ] 模块名
选项 | 说明 |
---|---|
-a | 加载命令行中的所有模块 |
-C | 重载默认配置文件 |
-c | 查看模块的配置文件 |
-d | 模块目录,默认情况下是模块的根目录 |
-f | 强制加载模块 |
-V | 显示版本信息 |
-v | 显示程序在做什么,通常在出错的情况下才使用 |
-n | 可以和-v 选项一起使用,在调式的时候非常有用 |
-r | 卸载模块 |
rmmod 命令用来卸载模块,modprobe 命令和insmod 命令加载的模块都可以使用这个命令完成卸载。
命令格式
rmmod [ 选项 ] 模块名
选项 | 说明 |
---|---|
-v | 显示命令执行的详细信息,一般只有出错时才会显示信息 |
-f | 强制卸载模块 |
-s | 向系统日志发送错误信息 |
-V | 显示版本信息 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。