249个shell脚本(shell 脚本处理)

本文目录
- shell 脚本处理
- 怎样编写shell脚本实现统计一个小组的成绩情况,统计信息包括:总分,平均分,最高分
- 如何用shell脚本统计出当前目录下子目录,还有所有可读,可写,可执行的文件的个数
- 利用shell脚本如何提取一个文件中某一特定行和下面若干行的内容
- 问个关于shell脚本的问题
- shell 脚本求解
shell 脚本处理
#!/bin/bash
#fd=’./分类/’
#for fn in `ls $fd` #如果多个文件,使用类似方法依次得到文件名
fn=’a.txt’
awk -F, ’NR==1{col2=$2;col3=$3}
NR》1{printf $1;
if(index($2,"、")》0){
split($2,arr,"、");
for(a in arr){
ind=index(arr,"-");
if(ind》0){
split(arr,arB,"-");
beg=arB;
end=arB;
# print "beg=",beg,"end=",end
for(i=beg;i《=end;i++){
printf(",%s%s",col2,i);
}
}else{printf(",%s%s",col2,arr)}
}
}else{printf(",%s%s",col2,$2);}
printf(",%s%s\n",col3,$3);
}’ $fn
注意:你的例子中 分割符逗号有中文的,也有英文的,我统一改成了英文的。如果不改,-F选项改为:-F,,
printf(",%s%s",字符串1,字符串2),也可以写为:printf ","字符串1""字符串2
前面这样可能更好理解。
有一种情况 没考虑,代码更改如下:
#!/bin/bash
#fd=’./分类/’
#for fn in `ls $fd`
fn=’a.txt’
awk -F, ’NR==1{col2=$2;col3=$3}
NR》1{printf $1;
if(index($2,"、")》0){
split($2,arr,"、");
for(a in arr){
ind=index(arr,"-");
if(ind》0){
split(arr,arB,"-");
beg=arB;
end=arB;
# print "beg=",beg,"end=",end
for(i=beg;i《=end;i++){
printf(",%s%s",col2,i);
}
}else{
printf(",%s%s",col2,arr)
}
}
}else if(index($2,"-")》0){
split($2,arB,"-");
beg=arB;
end=arB;
for(i=beg;i《=end;i++){
printf(",%s%s",col2,i);
}
}else{
printf(",%s%s",col2,$2);
}
printf(",%s%s\n",col3,$3);
}’ $fn
多种情况的验证:
怎样编写shell脚本实现统计一个小组的成绩情况,统计信息包括:总分,平均分,最高分
#!/bin/bash\x0d\x0a\x0d\x0a# 2013/07/01 sun\x0d\x0a\x0d\x0a#功能说明:实现统计录入学生成绩的总人数,得出最高分,最低分,平均分,方差,标准方差,还有各个分数段的所占百分比\x0d\x0a\x0d\x0aecho "请输入所有学生的成绩,以空格隔开:"\x0d\x0a\x0d\x0aread -a score_arr\x0d\x0a\x0d\x0a#定义一个数组来存放用户输入的成绩\x0d\x0a\x0d\x0asorted_arr=($(printf ’%s\n"${score_arr} -v vb=$ave ’BEGIN{printf "%2d" ,va-vb}’)\x0d\x0a\x0d\x0a #让每一个数都减去平均数然后赋值于ua\x0d\x0a\x0d\x0a ual=$(awk -v va=$ua -v vb=$ua ’BEGIN{printf "%2d" ,va*vb}’)\x0d\x0a\x0d\x0a #算得ua的平方\x0d\x0a\x0d\x0a uall=$(awk -v va=$uall -v vb=$ual ’BEGIN{printf "%2d" ,va+vb}’)\x0d\x0a\x0d\x0a #算出它们的总合,也就是方差\x0d\x0a\x0d\x0adone\x0d\x0a\x0d\x0au=$(awk -v va=$uall -v vb=$count ’BEGIN{printf "%2d" ,va/vb}’)\x0d\x0a\x0d\x0a#算出学生成绩的平均分,并赋值于ave\x0d\x0a\x0d\x0a#下面是计算每个分数段的百分数\x0d\x0a\x0d\x0acountb=$(awk -v va=$b -v vb=$count ’BEGIN{printf "%2.2f%%" ,va*100/vb}’)\x0d\x0a\x0d\x0a#echo $countb\x0d\x0a\x0d\x0acountc=$(awk -v va=$c -v vb=$count ’BEGIN{printf "%2.2f%%" ,va*100/vb}’)\x0d\x0a\x0d\x0a#echo $countc\x0d\x0a\x0d\x0acountd=$(awk -v va=$d -v vb=$count ’BEGIN{printf "%2.2f%%" ,va*100/vb}’)\x0d\x0a\x0d\x0a#echo $countd\x0d\x0a\x0d\x0acounte=$(awk -v va=$e -v vb=$count ’BEGIN{printf "%2.2f%%" ,va*100/vb}’)\x0d\x0a\x0d\x0a#echo $counte\x0d\x0a\x0d\x0acountf=$(awk -v va=$f -v vb=$count ’BEGIN{printf "%2.2f%%" ,va*100/vb}’)\x0d\x0a\x0d\x0a#echo $countf\x0d\x0a\x0d\x0a#输出结果\x0d\x0a\x0d\x0aecho "总人数 最高分 最低分 平均分 方差 "\x0d\x0a\x0d\x0aecho "$count $max $min $ave $u " \x0d\x0a\x0d\x0aecho "标准方差=" \x0d\x0a\x0d\x0aecho "scale=5;sqrt($u)" | bc\x0d\x0a\x0d\x0a#算出标准方差\x0d\x0a\x0d\x0aecho " 60分以下 60--69 70--79 80--89 90--100"\x0d\x0a\x0d\x0aecho "人数" " $b $c $d $e $f"\x0d\x0a\x0d\x0aecho "比例" "$countb $countc $countd $counte $countf"
如何用shell脚本统计出当前目录下子目录,还有所有可读,可写,可执行的文件的个数
#!/bin/bash
fcnt=0
dcnt=0
frcnt=0
fwcnt=0
fxcnt=0
for file in *
do
if ;then
let fcnt+=1
if ;then
let frcnt+=1
fi
if ;then
let fwcnt+=1
fi
if ;then
let fxcnt+=1
fi
elif ;then
let dcnt+=1
fi
done
echo "There are $fcnt files in $PWD"
echo -e "\tThere are $frcnt readable files in $PWD"
echo -e "\tThere are $fwcnt writeable files in $PWD"
echo -e "\tThere are $fxcnt executeable files in $PWD"
echo "There are $dcnt directories in $PWD"
利用shell脚本如何提取一个文件中某一特定行和下面若干行的内容
1、在linux目录/root下建立一个txt文件,内容如下,使用|竖线分割,作为我们的实验数据样本。
2、sed用法、sed-n’xp’data.txt;显示文件X行数据,获取第18行数据,即为sed-n’18p’data.txt。
3、sed-n’开始行,结束行p’data.txt;显示文件X行到Y行的内容:命令:sed-n’10,18p’data.txt。
4、head/tail用法。tail用法:tail经常用来查看文件末尾的数据,在shell中可以获取文本中指定数据行。tail-n-3data.txt获取文件最好3行数据。tail-n+3data.txt获取文件3到最后一行数据。
5、head用法:head经常用来显示文本的前n行数据。head-n10data.txt显示文本请10行数据。
6、tail和head的结合使用:例如获取文本倒数第二行数据,结果如图所示。命令:tail-n2data.txt|head-n1。
7、awk用法、awk在文本处理方面有着强大的功能,配合脚本使用,可以打印指定行和列。awk’NR==18{print}’data.txt。NR指定行号。
问个关于shell脚本的问题
第2段:filename=${fileuser:-"filename"}
意思是当变量fileuser为空时,filename变量的值就是字符串“filename”,如果不为空时,filename变量的值就是fileuser变量的值。也就是说,文件名最后就是字符串“filename”时,就表明没有设置文件名
第3段:这是取时间命令的固定格式,没什么好讲的
今天:date1=`date +%y%m%d`
昨天:date2=`date -d "1 days ago" +%y%m%d`
前天:date3=`date -d "2 days ago" +%y%m%d`
以上是取时间的命令,注意命令的左右两边的符号是键盘上波浪线的那个键。用了什么---就错了。
不知道你的明白?O(∩_∩)O~
shell 脚本求解
命令行:sed -i ’s/ABC123/EFG456/2’ a.txt
脚本:
cat 》》 script.sh 《《EOF
#!/bin/bash
file=\$1
if ; then
echo -e "请输入\${file},如 script.sh a.txt"
exit 1
fi
if ; then
echo -e "文件\${file} 不存在"
exit 2
fi
sed -i ’s/ABC123/EFG456/2’ \$file
echo -e "修改\${file}成功"
exit 0
EOF
如果script.sh 中有类似这样的字符 要先删除
添加权限:chmod a+x script.sh
调用 : ./script.sh a.txt

更多文章:
下载免费java(有什么无病毒、安全的网站可以免费下载java格式手机游戏,且是触屏全屏的)
2026年9月24日 18:00
php7连接mysql数据库操作(PHP7连接mysql数据库方法)
2025年12月29日 00:15
c语言终止程序(C语言~~~如何使程序中途结束、跳出~~~)
2025年6月5日 07:30
flex布局的兼容性(怎么用css使得input的输入框对齐,要写出代码,别百度其他的)
2026年7月27日 12:15
正则表达式支持库(怎样在aardio中使用正则表达式,用哪个函数)
2025年11月17日 05:30
腾讯云数据库管理工具(navicat导入mangodb几百万行传输中断)
2025年12月5日 03:30
java 线程安全(java中为什么说,String是线程安全的)
2026年5月1日 04:00
下载excel教程(windows家庭中文版的怎么下载excel教程)
2026年8月11日 20:15
delphi控制485(如何在delphi中使用海康威视的485口)
2026年9月4日 06:00
tengine windows(天龙八部报错是怎么回事啊 )
2026年2月14日 17:45
ctab化学名称?predictive与predictable的区别
2026年8月14日 15:30












