Linux学习总结(Shell脚本、查看内核模块)

  目录

一、Shell脚本

1、判断结构

(1)if 结构

(2)if / else 结果

 (3)if / elif / else 结构

 (4)case 结构

2、循环结构

(1) for 循环

(2)while 循环

(3)unlit 循环

3、 break 与 continue

(1)break

(2)continue 

 二、查看内核模块

1、 lsmod 命令

2、modinfo 命令

3、modprobe 命令

4、rmmod 命令


      学习Linux的Shell脚本、查看内核模块

一、Shell脚本

1、判断结构

(1)if 结构

      if 语句是最简单的判断结构,它对条件进行判断,如果判断结果为真,则执行下面的命令,其判断格式有两种形式

if expression
then
   命令语句
fi

或者

if expression; then
     命令格式
fi

      在上述格式中,expression表示条件表达式,如果expression后面没有“ ; ”符号,则then要另起一行,若有“ ; ”符号,则then要与expression处于同一行,expression后面要用“ ; ”符号隔开,且中间要有一个空格。最后的fi表示判断结构结束。

      例如:编写一个脚本chapter1.sh,判断在当前目录下是否存在一个名为name.yaml的文件

进入编辑

编辑内容,保存退出

执行

(2)if / else 结果

       if / else结构指如果满起条件,则执行then后面的操作:如果不满足条件,则执行else后面的操作。例如,判断一个数是否等于100,如果等于,则执行then后面操作;如果不等于,则执行else后面的操作。

if / else结构的格式

if expression
then
    命令格式1
else
    命令格式2
fi

      在上述格式中,如果expression条件为真,则执行“ 命令语句1 ”,否则执行“ 命令语句2 ”。当然,then也可以与expression在同一行,使用“ ; ”符号分隔开。

      例如:编写一个脚本chapter3.sh,用于从键盘读取用户输入的字符串,如果字符串为空,则输出为空;如果字符串不为空,则输出字符串

进入编辑,保存退出

 执行

如果没有输入直接回车得到的结果为

 (3)if / elif / else 结构

      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,从键盘读取学生成绩,判断学生成绩级别

进入编辑,保存退出

 

 执行

 (4)case 结构

       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,让用户输入一个整数值,根据输入的整数值判断是周几

进入编辑,保存退出

  执行

2、循环结构

(1) for 循环

      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编程中较少使用,此处不再赘述。

(2)while 循环

      与for循环相比,while 循环要简单一些。它只有一个判断条件,如果条件为真,则执行循环体中的命令语句;如果条件为假,则退出循环。

循环格式

while expression
do 
   命令格式
done

      上述语法格式中,如果 expression 为真,则执行循环体;如果为假,则退出循环。在循环执行过程中,必须要有退出循环条件以避免陷入死循环。

      例如:编写一个脚本chapter7sh,循环输出1~5这5个数值

进入编辑,保存退出

    执行

       例如:编写脚本chapter8sh,使用while循环输出当前目录下的所有文件,要从命令行传递参数

进入编辑,保存退出

     执行

(3)unlit 循环

      until循环的格式与while循环类似,但在判断循环条件时,只有循环条件为假才会去执
行循环体;如果循环条件为真,则退出循环,

语法格式

until expression
do
   命令格式
done

       在上述语法格式中,直到expression条件成立才会退出循环,这一点与for循环、while循环正好是相反的,读者要尤其注意。

       例如:编写脚本chapter9.sh,使用until循环输出1~5这5个数值

进入编辑,保存退出

 

      执行

3、 break 与 continue

(1)break

       break用于强行退出循环,它会忽略循环条件的作用,退出循环之后,它接着执行循环之外的命令。break可以用在for循环、while循环、until循环中

       例如: 编写脚本chapter10.sh,当num变量值为3时,退出循环

进入编辑,保存退出

   执行

       由输出结果可知,脚本只输出了1、2、3这3个数值,当num变量值为3时,break循环控制符强行退出了循环,退出循环之后,脚本又执行了循环之外的echo命令。需要注意的是,如果脚本中有多层循环,则break只能退出本层循环,无法退出外层的循环。

(2)continue 

      continue 用于终止本次循环,接着执行下一次循环,它不会退出循环,只是跳过本次循环,循环会按照循环条件正常退出。

       例如:编写一个脚本 chapter12.sh,输出1~50内可以被5整数的数

进入编辑,保存退出

    执行

 二、查看内核模块

1、 lsmod 命令

      lsmod 命令可以列出目前系统中已经加载的所有模块,这个命令没有任何参数,直接执行即可

例如

...

        以上命令执行后打印的内核模块信息分为3列:第一列Module表示模块名称,第二列Size 表示模块占用内存大小(字节),第三列Used by声明模块是否被其他程序使用。如果第三列为0,则表明没有程序在使用这个模块,它可以随时被卸载;非0则表明有程序在使用它。例如fuse模块,Used by的值为3,表示有3个程序在使用这个模块,它就无法被卸载。

       如果要查看具体某一个模块是否被加载,可以使用如下命令:

lsmod | grep 模块名

       如果模块被加载了,那么它会显示出模块的各项信息;如果模块没有被加载,则不会输出任何信息。

       例如:查询一个已经被加载过的模块btusb,它会输出模块名、模块大小和被占用情况


 

        例如:下面再查询一个没有被加载的模块,如vfat模块,它用于处理长文件名

         命令执行后没有输出任何,表明模块vfat未被加载。

2、modinfo 命令

       Linux 提供了modinf 命令来看内核模块信息,

命令格式

modinf [ 选项 ] 模块名
modinf 命令的常用选项
选项说明
-a显示模块开发人员信息
-d显示模块的使用说明
-l显示模块遵循的规范,都遵循GPL规范
-h显示帮助信息
-p显示模块所支持的参数
-V显示模块版本信息

      用不同的命令行参数可以查看模块的相应信息,如果在查看模块时没有使用任何选项,则会输出关于这个模块的所有信息。

      例如,查看sg驱动模块,这个模块能够将SCSI命令直接发送给相应设备并获得返回信息

        这里显示了sg模块的全部信息,包括作者、版本、遵循GPL规范、使用说明等。

3、modprobe 命令

      modprobe 命令不仅可以动态加载模块,通过modprobe 命令加载、卸载模块时,

命令格式

modprobe [ 选项 ] 模块名
modprobe 命令的常用选项
选项说明
-a加载命令行中的所有模块
-C重载默认配置文件
-c查看模块的配置文件
-d模块目录,默认情况下是模块的根目录
-f强制加载模块
-V显示版本信息
-v显示程序在做什么,通常在出错的情况下才使用
-n可以和-v 选项一起使用,在调式的时候非常有用
-r卸载模块

4、rmmod 命令

       rmmod 命令用来卸载模块,modprobe 命令和insmod 命令加载的模块都可以使用这个命令完成卸载。

命令格式

rmmod [ 选项 ] 模块名
rmmod 命令的常用选项
选项说明
-v显示命令执行的详细信息,一般只有出错时才会显示信息
-f强制卸载模块
-s向系统日志发送错误信息
-V显示版本信息

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值