自己不是专业的linux,平时工作中也不用linux编程,自学一些linux shell编程,忘了学,学了忘,效率不高。今天权当复习吧。
想想这样一个情景吧,获取某一行的部分列值。
考虑这样的输入:“root:x:0:0:root:/root:/bin/bash”,现在我们获取用户及shell信息。自己暂时想到的5种实现方式。
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
|
#!/bin/bash
##############################################
#第二种实现 普通循环
##############################################
line=
"root:x:0:0:root:/root:/bin/bash"
;
oldIFS=$IFS;
IFS=
":"
;
declare
-i count=0;
#count=0;
for
item
in
$line;
do
[ $count -
eq
0 ] && user=$item
if
[[ $count -
eq
6 ]];
then
shell=$item
fi
#let count++
count=$[ $count+1 ]
#count=$(($count+1))
#count=`expr $count+1`
#count=$(expr $count+1);
done
IFS=$oldIFS;
echo
1: $user\'s shell is $shell by process:$$;
##############################################
#第二种实现 借助sed命令;
##############################################
user=`
echo
$line |
sed
's/:.*$//'
`;
shell=$(
echo
$line |
sed
's/^.*://'
);
echo
2: $user\'s shell is $shell by process:$$;
##############################################
#第3种实现 借助cut命令;
##############################################
user=`
echo
$line |
cut
-d: -f1`;
shell=$(
echo
$line |
cut
-d: -f7);
echo
3: $user\'s shell is $shell by process:$$;
##############################################
#第4种实现 xargs使用
#############################################
echo
$line |
xargs
-d: -n 1 |
tr
-s
'\n'
> file4
user=`
cat
file4 |
head
-n 1`
shell=`
cat
file4 |
tail
-n 1`;
echo
4: $user\'s shell is $shell by process:$$;
rm
-rf file4 2>>
/dev/null
##############################################
#第5种实现 awk使用
#############################################
echo
$line |
awk
-F
':'
'{print "5:" $1 " '
\
''
s "
" shell is"
$7 }'
|
分析:抛开5种方式的优劣。可以了解以下内容。
-
文本处理工具:sed,tr
-
文本列选择工具:cut,awk
-
文本行选择工具:head,tail
-
计数运算多种方式:$[],$(()),``
-
变量声明:declare
-
参数处理:xargs
本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/1914312,如需转载请自行联系原作者