2041_22T2.Q7

先检查是否已经存在拓展名,即文件名中是否包含”.”

然后检查开头是不是#!

再检查这个第一行是否包含有效的解释器,但应该是不需要检验可用性的,只需要看是否有那个字样

重命名目标如果存在则输出报错

都没问题了打印一个mv语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/dash

for f in "$@"; do

case "$f" in
*.* )
echo "$f already has an extension"
continue
;;
esac

first_line=""
IFS= read -r first_line < "$f" 2>/dev/null

case "$first_line" in
"#!"* )
;;
* )
echo "# $f does not have a #! line"
continue
;;
esac

ext=""
case "$first_line" in
*perl* )
ext="pl"
;;
*sh* )
ext="sh"
;;
*python* )
ext="py"
;;
esac


# 现在我们已经找到了#!开头且带有解释器的
# 那ext没有赋值的就是没有解释器的

if [ -z "$ext" ]; then
echo "# $f no extension for #! line"
continue
fi

# 检查改出来的文件是否已存在重名

if [ -f "$f.$ext" ]; then
echo "# $f.$ext already exists"
continue
fi

echo "mv $f $f.$ext"

done