这个shell脚本行与awk的含义

时间:2012-12-19 11:37:15

标签: bash shell awk

我在书籍[linux device drivers]中阅读了这一行脚本。任何人都可以帮助解释它的作用(可能只是几个字)?

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)

在上下文中:

#!/bin/sh
module="scull"   
device="scull"  
mode="664"

# invoke insmod with all arguments we got  
# and use a pathname, as newer modutils don't look in . by default

/sbin/insmod ./$module.ko $* || exit 1


# remove stale nodes  
rm -f /dev/${device}[0-3]   

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)

mknod /dev/${device}0 c $major 0
....

3 个答案:

答案 0 :(得分:8)

更好的方法是:

major=$(awk -v mod=$module '$2==mod{print $1}' /proc/devices)

答案 1 :(得分:2)

我也读了这篇文章,但这条线对我不起作用。我不得不将其修改为

major=$(awk "\$2 == \"$module\" {print \$1}" /proc/devices)

第一部分\$2 == \"$module\"是模式。当满足时,即第二列等于“scull”,执行命令print \$1,打印第一列。该值存储在变量major中。 $需要进行转义,因为它们需要传递给awk。

答案 2 :(得分:1)

/proc/devices包含每个模块当前配置的字符和块设备。

在上下文中扩展一些变量,并在相等的情况下修复语法错误,命令如下所示:

awk '$2=="scull" {print $1}' /proc/devices

这意味着“如果第二列的值为scull,则输出第一列。”

此命令在子shell中运行 - $(...) - 并将输出分配给变量$major

目的的解释是in the book

  

因此,可以使用awk等工具编写加载已分配动态编号的模块的脚本,以便从/proc/devices检索信息,以便在{{/dev中创建文件1}}。

请注意,在the distributed examples中,scull_load中的行与Vivek的修正相匹配。