sh/bash/dash/ksh/zsh等Shell脚本
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#1
帖子
由 zhi5631 » 2011-11-13 16:21
2.编写一个名为cala的shell过程,其功能是小型计算器,可以进行两数加、减、乘、除运算。两操作数和运算符由位置参数给出(位置参数1和3分别是两操作数,位置参数2是运算符),并将四种运行结果追加存入cal文件中。
代码: 全选
#!/bin/bash
Usage(){ echo "param err"; exit -1;}
[ $# -ne 3 ] && Usage
echo '+-*/' | grep "$2" >/dev/null 2>&1
[ $? -ne 0 ] && Usage
e="awk -v p1=$1 -v p2=$3 "
#b="ENG { close(\"cal\") }"
b=" close(\"cal\")"
case $2 in
'+')
s="$e 'BEGIN { print p1 + p2 >> \"cal\"; $b}'"
;;
'-')
s="$e 'BEGIN {print p1 - p2 >> \"cal\"; $b}'"
;;
'*')
s="$e 'BEGIN { print p1 '*' p2 >> \"cal\"; $b}'"
;;
'/')
s="$e 'BEGIN { print p1 / p2 >>\"cal\"; $b}'"
;;
*)
echo "case err"
;;
esac
echo $s
eval $s
闲来无事,找了个腾讯面试题做作,请赐教。
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#2
帖子
由 zhi5631 » 2011-11-13 17:07
4.腾讯一shell试题.
假设qq.tel文件内容:
12334:13510014336
12345:12334555666
12334:12343453453
12099:13598989899
12334:12345454545
12099:12343454544
分类如下:
[12334]
13510014336
12343453453
...........
[12099]
13598989899
12343454544
............
代码: 全选
wuya@wuya:~/test$ cat cal
BEGIN {
FS = ":"
}
{
w[$1] = w[$1] ":" $2
}
END{
for (i in w){
printf "[%s]", i
n = split(w[i], a, ":")
j = 1
while(j < n){
printf "\t%s\n", a[j]
j++
}
}
}
代码: 全选
wuya@wuya:~/test$ awk -f cal test
[12334]
13510014336
12343453453
[12099]
13598989899
[12345]
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#3
帖子
由 zhi5631 » 2011-11-13 17:10
11.说明一下/proc/sys子目录的作用
答:该子目录的作用是报告各种不同的内核参数,并让你能交互的更改其中某些。与/proc中所有
其他文件不同,该目录中的某些文件可以写入,不过针对root。一下是该子目录的两个最常见
的用途:
(1)允许路由:即便是Mandrakelinux 默认的内核也是允许路由的。你必须显式允许它这么做
为此:#echo 1 >/proc/sys/net/ipv4/ip_forward.
如果您要禁用,则让上述1改为0
(2)阻止ip欺骗:ip欺骗会让人认为某个来自于外部的某个数据包来自于它到达的那个接口,
这一技术常被crack利用。你可以阻止这种入侵:
#echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter.
这次改变仅由系统运行时有效,系统重启后,会改变为默认值。你可以将以上命令添加到
/etc/rc.d/rc.local中,启动就会运行。另一方法:修改/etc/sysctl.conf
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#4
帖子
由 zhi5631 » 2011-11-13 17:15
7.比如,ext2文件系统,如果异常死机,开机如何修复文件系统?
答:如果异常死机,如断电,通知机房的人开机之后,我们需要远程修复,检查文件系统。除了
/ 分区之外,其他分区:umount /home
fsck -y /home
/ 分区需要开机之后由机房人员检查。随后我们登录并扫描/home分区
8.如何检查一个进程所使用的文件句柄?
答:看这里面/proc/进程号/fd/ 的文件个数就行了
9.查看Apache的进程数。
# ps -ef|grep httpd|wc -l
10.如何统计apache的每秒访问数?
tail access_log|awk '{print $1,$4}'
其中文件在:/etc/httpd/access_log
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#5
帖子
由 zhi5631 » 2011-11-13 18:03
5.如果得到随机的字串,长度和字串中出现的字符表可定义并将字串倒序显示,如把0123456789作为基准的
字串字符表,产生一个6位的字串642031,打印出的字符串为130246,可使用bash/perl/php/c任一种。
代码: 全选
wuya@wuya:~/test$ echo "" | awk -v len=6 -v str="1234567890" -f test
before: 6 1234567890
733366
663337
代码: 全选
wuya@wuya:~/test$ cat test
BEGIN{
srand()
}
{
printf "before: %d %s\n", len, str;
strlen = length(str)
for (i = 1; i <= strlen; i++)
s[i] = substr(str, i, 1)
i = 1
while( i <= len){
tmp = int(rand() * strlen)
#printf "%d %s\n", tmp, s[tmp]
if(s[tmp])
rand_str = rand_str s[tmp]
else
rand_str = rand_str "0"
i++
}
#print rand_str
}
END{
print rand_str
i = len
flag = 0
while(1){
printf "%c", substr(rand_str, i, 1)
--i
if(flag == 1)
break
if (i == 1){
flag = 1
}
}
print
}
上次由
zhi5631 在 2011-11-13 18:06,总共编辑 3 次。
-
月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
-
联系:
#6
帖子
由 月下叹逍遥 » 2011-11-13 18:04
flash算不算?

浮生七十今三十,从此凄惶未可知
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#7
帖子
由 zhi5631 » 2011-11-13 18:07
月下叹逍遥 写了:flash算不算?

什么意思? 没懂?
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#8
帖子
由 zhi5631 » 2011-11-13 18:11
处理一下文件内容,将域名取出并进行计数排数,如处理:
代码: 全选
http://www.baidu.com/index.html
http://ww.baidu.com/1.html
http://www.baidu.com/2.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
代码: 全选
wuya@wuya:~/test$ cat test | cut -d'/' -f 3 | sort | uniq -c
1 mp3.baidu.com
2 post.baidu.com
1 ww.baidu.com
3 www.baidu.com
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#9
帖子
由 fnan » 2011-11-13 20:48
zhi5631 写了:5.如果得到随机的字串,长度和字串中出现的字符表可定义并将字串倒序显示,如把0123456789作为基准的
字串字符表,产生一个6位的字串642031,打印出的字符串为130246,可使用bash/perl/php/c任一种。
代码: 全选
wuya@wuya:~/test$ echo "" | awk -v len=6 -v str="1234567890" -f test
before: 6 1234567890
733366
663337
代码: 全选
wuya@wuya:~/test$ cat test
BEGIN{
srand()
}
{
printf "before: %d %s\n", len, str;
strlen = length(str)
for (i = 1; i <= strlen; i++)
s[i] = substr(str, i, 1)
i = 1
while( i <= len){
tmp = int(rand() * strlen)
#printf "%d %s\n", tmp, s[tmp]
if(s[tmp])
rand_str = rand_str s[tmp]
else
rand_str = rand_str "0"
i++
}
#print rand_str
}
END{
print rand_str
i = len
flag = 0
while(1){
printf "%c", substr(rand_str, i, 1)
--i
if(flag == 1)
break
if (i == 1){
flag = 1
}
}
print
}
#越复杂越好吗?
len=6;grep -o '.' <<<'1234567890'|shuf -n $len|tr -d '\n'|rev
#好像搞错了,应该是len长度不限的:
len=10;str='abcdefg';c=($(grep -o '.' <<<$str));while((len-->=1));do printf ${c[$(($RANDOM%${#c[*]}))]};done|rev
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
zhi5631
- 帖子: 19
- 注册时间: 2010-08-08 15:41
#10
帖子
由 zhi5631 » 2011-11-14 8:11
fnan 写了:zhi5631 写了:5.如果得到随机的字串,长度和字串中出现的字符表可定义并将字串倒序显示,如把0123456789作为基准的
字串字符表,产生一个6位的字串642031,打印出的字符串为130246,可使用bash/perl/php/c任一种。
代码: 全选
wuya@wuya:~/test$ echo "" | awk -v len=6 -v str="1234567890" -f test
before: 6 1234567890
733366
663337
代码: 全选
wuya@wuya:~/test$ cat test
BEGIN{
srand()
}
{
printf "before: %d %s\n", len, str;
strlen = length(str)
for (i = 1; i <= strlen; i++)
s[i] = substr(str, i, 1)
i = 1
while( i <= len){
tmp = int(rand() * strlen)
#printf "%d %s\n", tmp, s[tmp]
if(s[tmp])
rand_str = rand_str s[tmp]
else
rand_str = rand_str "0"
i++
}
#print rand_str
}
END{
print rand_str
i = len
flag = 0
while(1){
printf "%c", substr(rand_str, i, 1)
--i
if(flag == 1)
break
if (i == 1){
flag = 1
}
}
print
}
#越复杂越好吗?
len=6;grep -o '.' <<<'1234567890'|shuf -n $len|tr -d '\n'|rev
#好像搞错了,应该是len长度不限的:
len=10;str='abcdefg';c=($(grep -o '.' <<<$str));while((len-->=1));do printf ${c[$(($RANDOM%${#c[*]}))]};done|rev
代码: 全选
学习了, 我一直都认为能实现相同的功能代码越少越好。
知识点:
1. rev: reverse lines of a file or files
2. shuf: 把输入行按随机顺序输出到标准输出。
-n, --head-count=行数 最多输出指定的行数
3. echo $(($RANDOM % 3)) 生成随机数
求教: grep -o '.' <<< "1234567890" 这里<<<是什么语法,没见过这个,我只知道here文档及<<.
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#11
帖子
由 枫叶饭团 » 2011-11-14 8:41
运维考试?狗日的腾迅
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#14
帖子
由 fnan » 2011-11-14 20:53
求教: grep -o '.' <<< "1234567890" 这里<<<是什么语法,没见过这个,我只知道here文档及<<.
#变量引用,或者说直接引用内容。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#15
帖子
由 fnan » 2011-11-14 21:05
zhi5631 写了:4.腾讯一shell试题.
假设qq.tel文件内容:
12334:13510014336
12345:12334555666
12334:12343453453
12099:13598989899
12334:12345454545
12099:12343454544
分类如下:
[12334]
13510014336
12343453453
...........
[12099]
13598989899
12343454544
............
代码: 全选
wuya@wuya:~/test$ cat cal
BEGIN {
FS = ":"
}
{
w[$1] = w[$1] ":" $2
}
END{
for (i in w){
printf "[%s]", i
n = split(w[i], a, ":")
j = 1
while(j < n){
printf "\t%s\n", a[j]
j++
}
}
}
代码: 全选
wuya@wuya:~/test$ awk -f cal test
[12334]
13510014336
12343453453
[12099]
13598989899
[12345]
sort qq.tel|awk -F: '{if (n!=$1) print "["$1"]\n"$2;else print $2;n=$1}'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。