shell脚本练习-1

1、编写shell脚本,计算1~100的和。

#!/bin/bash

sum=0

for i in `seq 1 100`
do
   sum=$[$sum+$i]
done

echo $sum

2、编写shell脚本,输入一个数字n并计算1~n的和。

#!/bin/bash

read -p "input num:" n

sum=0

for ((i=0;i<=$n;i++))
do
  sum=`expr $sum + $i`
done

echo $sum

3、写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数

#以下5种方法均可
grep -n "" nowcoder.txt|awk -F: '{print }'|tail -n1| awk -F: '{print $1}'
awk '{print NR}' nowcoder.txt|tail -n1
awk 'END{print NR}' nowcoder.txt
sed -n '$=' nowcoder.txt
cat nowcoder.txt |wc -l

4、写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21...)的命令

for i in {0..500..7}; do
         echo "${i}"
done
for i in {0..500}
do
  if [ $[$i%7] == 0 ]
  then
    echo $i
  fi
done

5、写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始

示例:
假设 nowcoder.txt 内容如下:

a
b
 
c
 
d
 
e
 
 
f
  • 参考答案:
#
awk '{if($0==" ") {print NR}}' nowcoder.txt
#
cat -n nowcoder.txt |awk -F"\t" '$2==" " {print $1}'

6、写一个 bash脚本以去掉一个文本文件 nowcoder.txt中的空行

sed '/^[[:space:]]*$/d' nowcoder.txt
#
sed '/^\s*$/d' nowcoder.txt

7、写一个 bash脚本以统计一个文本文件 nowcoder.txt中字母数小于8的单词。

示例:
假设 nowcoder.txt 内容如下:
how they are implemented and applied in computer

你的脚本应当输出:
how
they
are
and
applied
in

说明:
不要担心你输出的空格以及换行的问题

  • 参考答案:
#空格也可操作
for i in `cat nowcoder_word.txt`; do if [[ ${#i} -lt 8 ]]; then echo $i; fi; done
#wc -L 可统计字符数
for i in `cat nowcoder_word.txt`; do if [ $(echo $i |wc -L) -lt 8 ]; then echo $i; fi; done
#awk
awk 'BEGIN{FS="";RS=" ";ORS="\n"}{if(NF<8)print$0}' nowcoder_word.txt

9、统计所有进程占用内存大小的和

假设 nowcoder.txt 内容如下:
root 2 0.0 0.0 0 0 ? S 9月25 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 9月25 0:00 [kworker/0:0H]
web 1638 1.8 1.8 6311352 612400 ? Sl 10月16 21:52 test
web 1639 2.0 1.8 6311352 612401 ? Sl 10月16 21:52 test
tangmiao-pc 5336 0.0 1.4 9100240 238544 ?? S 3:09下午 0:31.70 /Applications

以上内容是通过ps aux | grep -v 'RSS TTY' 命令输出到nowcoder.txt文件下面的
请你写一个脚本计算一下所有进程占用内存大小的和($6列):

  • 参考答案:
awk '{(sum=sum+$6)} END{print sum}' nowcoder_9.txt

10、每个单词出现的个数

写一个 bash脚本以统计一个文本文件 nowcoder.txt 中每个单词出现的个数。

为了简单起见,你可以假设:
nowcoder.txt只包括小写字母和空格。
每个单词只由小写字母组成。
单词间由一个或多个空格字符分隔。

示例:
假设 nowcoder.txt 内容如下:
welcome nowcoder
welcome to nowcoder
nowcoder
你的脚本应当输出(以词频升序排列):
to 1
welcome 2
nowcoder 3

说明:
不要担心个数相同的单词的排序问题,每个单词出现的个数都是唯一的。

  • 参考答案:
#awk
awk 'BEGIN{RS=" ";ORS="\n"} {print $0}' nowcoder_10.txt |sort|uniq -c |sort
 #tr
cat nowcoder_10.txt |tr ' ' '\n'|sort|uniq -c |sort
#

11、第二列是否有重复

给定一个 nowcoder.txt文件,其中有3列信息,如下实例,编写一个sheel脚本来检查文件第二列是否有重复,且有几个重复,并提取出重复的行的第二列信息:
实例:
20201001 python 99
20201002 go 80
20201002 c++ 88
20201003 php 77
20201001 go 88
20201005 shell 89
20201006 java 70
20201008 c 100
20201007 java 88
20201006 go 97

结果:
2 java
3 go

  • 参考答案:
#
cut -d" " -f2 nowcoder_11.txt |sort |uniq -c |awk '{if($1>1) {print $0}}'
# -cd
awk '{print $2}' nowcoder.txt | sort | uniq -cd 
#awk
awk '{a[$2]++} END{for(i in a) {if(a[i]>=2){print a[i]" "i}}}' nowcoder.txt

12、转置文件的内容

写一个 bash脚本来转置文本文件nowcoder.txt中的文件内容。

为了简单起见,你可以假设:
你可以假设每行列数相同,并且每个字段由空格分隔

示例:
假设 nowcoder.txt 内容如下:
job salary
c++ 13
java 14
php 12

你的脚本应当输出(以词频升序排列):
job c++ java php
salary 13 14 12

  • 参考答案:
[ttxie@41 test]$ awk '{print $1}' nowcoder_12.txt | xargs
job c++ java php
[ttxie@41 test]$ awk '{print $2}' nowcoder_12.txt | xargs
salary 13 14 12
awk '{
    for (i=1;i<=NF;i++){
        if (NR==1){
            res[i]=$i
        }
        else{
            res[i]=res[i]" "$i
        }
    }
}END{
    for(j=1;j<=NF;j++){
        print res[j]
    }
}' nowcoder.txt

13、统计一个文件 数字个数

写一个 bash脚本以统计一个文本文件 nowcoder.txt中每一行出现的1,2,3,4,5数字个数并且要计算一下整个文档中一共出现了几个1,2,3,4,5数字数字总数。

示例:
假设 nowcoder.txt 内容如下:
a12b8
10ccc
2521abc
9asf
你的脚本应当输出:
line1 number: 2
line2 number: 1
line3 number: 4
line4 number: 0
sum is 7

说明:
不要担心你输出的空格以及换行的问题

  • 参考答案:
i=1
while read line
do
        result=`echo $line|grep -o -E "[12345]" |wc -l`
        echo "line$i number:$result"
        let SUM+=result
        let i+=1
done < "nowcoder.txt"
echo sum is $SUM

14、去掉所有含有this的句子

写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出
示例:
假设输入如下:
that is your bag
is this your bag?
to the degree or extent indicated.
there was a court case resulting from this incident
welcome to nowcoder

你的脚本获取以上输入应当输出:
that is your bag
to the degree or extent indicated.
welcome to nowcoder

说明:
你可以不用在意输出的格式,包括空格和换行

  • 参考答案:
#
grep -v "this" nowcoder_14.txt
#
awk '$0!~/this/ {print $0}' nowcoder_14.txt
#
sed '/this/d' nowcoder_14.txt

15、求平均值

写一个bash脚本以实现一个需求,求输入的一个的数组的平均值

第1行为输入的数组长度N
第2~N行为数组的元素,如以下为:
数组长度为4,数组元素为1 2 9 8
示例:
4
1
2
9
8

那么平均值为:5.000(保留小数点后面3位)
你的脚本获取以上输入应当输出:
5.000

  • 参考答案:
#!/bin/bash
read  cnt
sum=0
cnt_cp=0
while  [ $cnt  -gt 0 ]
do
    read  num
    let  "sum+=num"
    let  "cnt--"
    let  "cnt_cp++"
done
echo  "scale=3;$sum/$cnt_cp"  |bc

16、去掉不需要的单词

写一个 bash脚本以实现一个需求,去掉输入中的含有B和b的单词
示例:
假设输入如下:
big
nowcoder
Betty
basic
test

你的脚本获取以上输入应当输出:
nowcoder test

说明:
你可以不用在意输出的格式,空格和换行都行

  • 参考答案:
cat nowcoder_16.txt |while read line
do
    a=`echo $line|grep -o -E "[Bb]" |wc -l`
    if [ $a -eq 0 ];then 
    echo $line
    fi
done
#
cat nowcoder_16.txt |grep -v -i b
#
awk '$0!~/[Bb]/ {print $0}' nowcoder_16.txt
#

Linux编程_Shell脚本练习题
牛客网题库

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • Linux的shell脚本是linux的入门基础课程,难度系数也不大,这里做一个学习笔记 ◆1.1 语法基本介绍 ...
    水车阅读 286评论 0 5
  • 【脚本1】打印形状 打印等腰三角形、直角三角形、倒直角三角形、菱形 【脚本2】截取字符串 现有一个字符串如下: h...
    学无止境_9b65阅读 446评论 0 1
  • 本文用于记录学习和日常中使用过的shell脚本 【脚本1】打印形状 打印等腰三角形、直角三角形、倒直角三角形、菱形...
    zwb_jianshu阅读 5,525评论 1 5
  • 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shel...
    某人在阅读 2,008评论 0 0
  • linux shell 脚本攻略 [TOC] 1.基本概念与特征 基础 双引号: 引号内可以引用变量,与php相同...
    cdz620阅读 1,071评论 0 1