shell练习题

这篇博客涵盖了多个Shell脚本的练习题目,包括计算序列和、文件操作、用户管理、日志处理等。同时讲解了Shell脚本中的注释、执行、变量赋值、条件判断、循环结构和函数等核心概念,帮助读者掌握和提升Shell脚本编写技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 编写shell脚本,计算1-100的和
!#/bin/bash
##计算求和
##Writen by zcy 2018-4-28
sum=0

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

echo $sum

2 . 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;

#!/bin/bash
##交互
##writen by zcy 2018-4-28
 #! /bin/bash

n=0
while [ $n -lt "1" ]; do
        read -p "Please input a number, it must greater than "1":" n
done

sum=0

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

echo $sum

3 . 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下

#! /bin/bash

cd /root
for f in `ls `; do
        if [ -d $f ] ; then
                cp -r $f /tmp/
        fi
done
~              

4 . 编写shell脚本,批量建立用户user_00, user_01, … user_100并且所有用户同属于users组

 #! /bin/bash

groupadd users

for i in `seq 0 9`; do
        useradd -g users user_0$i
done



for j in `seq 10 100`; do
        useradd -g users user_$j
done

5 . 编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列

 #! /bin/bash

awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt
sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt
awk '$1>10 {print $2}' /tmp/n2.txt

6 编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1

#! /bin/bash

checkip() {

        if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ; then
                a=`echo $1 | awk -F. '{print $1}'`
                b=`echo $1 | awk -F. '{print $2}'`
                c=`echo $1 | awk -F. '{print $3}'`
                d=`echo $1 | awk -F. '{print $4}'`

                for n in $a $b $c $d; do
                        if [ $n -ge 255 ] || [ $n -le 0 ]; then
                                echo "the number of the IP should less than 255 and greate than 0"
                                return 2
                        fi
                done
        else

                echo "The IP you input is something wrong, the format is like 192.168.100.1"
                return 1
        fi

}



rs=1
while [ $rs -gt 0 ]; do
    read -p  "Please input the ip:" ip
    checkip $ip
    rs=`echo $?`
done

echo "The IP is right!"

作业题

  • shell脚本中,怎么做可以把某一行给注释掉?

    在行首使用#来注释掉

  • 如何执行一个shell脚本呢?

sh  xx.sh   

或者给予X权限后  ./xx.sh 




  • 为了方便管理,我们约定把shell脚本都放到哪个目录下?

    /usr/local/bin

  • 为了更好的调试shell脚本,我们可以加一个选项来观察shell脚本的执行过程,是哪个选项呢?

    -x选项

  • 使用date命令打印5天前的日期,要求日期格式为: xxxx-xx-xx

date --date "5 days ago" +"%Y-%m-%d"date --date "5 days ago" +"%F"
  • 脚本中,变量赋值=左右2边不能有空格

  • shell脚本中如何使用数学运算

#!/bin/bash
a=1
b=3
c=$[$a+$b]
echo $c
  • shell脚本中有一个命令可以实现脚本和用户交互,请问是哪个命令,怎么使用?

read -p

  • 在shell中如何进行大小或者等于判断?

-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-eq 等于
-ne 不等于

  • shell脚本中,用什么符合表示并且,用什么符合表示或者?

并且 && 或者 ||

  • shell脚本中,case逻辑判断的结构是什么样的?
case 变量名 in
       value1)
          command
         ;;
       value2)
          command
          ;;
        *)
          command
          ;;
      esac
  • 列举出shell脚本中常用的循环结构。

for 变量名 in 条件; do …. done

while 条件; do … done

  • shell脚本中函数的作用是什么?函数结构是什么样的?

作用:就是把一段代码整理到了一个小单元中,并给这个小单元自定义名字,方便调用

function filename(){
           command
    }
  • 写脚本实现,把一个目录下的所有文件(不含有目录)全部在文件
    名后面加一个.bak
#!/bin/bash

    for i in `ls -al|grep -v 'd'|awk -F ' ' '{print $9}'`;do
        mv $i $i".bak"
    done
  • 编写一个shell脚本,讲当前目录下大小大于100K的文件全部移动到/tmp/ 目录下。
#!/bin/bash
     value=`ls -l|awk -F ' ' '{print $5,$NF}' | awk '{if($1>100) {print $NF}}'`
     for file in $value
     do
     mv $file /tmp/
     done
  • 写一个小脚本,获取本机的HOSTNAME、IP地址以及DNS地址。
    hostname=`hostname`
    echo "hostname : " $hostname
    ip=`/sbin/ifconfig -a | grep 'inet addr' | awk -F ':' '{print $2}' | awk '{print $1}'`
   for i in $ip
      do
          echo  "`ifconfig | grep -B1 "$i" | grep -v 'inet addr' | awk '{print $1}'` "$i""
     done
    DNS=`cat /etc/resolv.conf |grep nameserver|grep -v '#'`
    echo  $DNS
  • 写两个小脚本验证break和continue在循环中的作用
for i in `seq 1 10`;do 
        if [ $i -ne 5 ];then
                echo $i
        else
                break
        fi
done

for i in `seq 1 10`;do 
        if [ $i -ne 5 ];then
                echo $i
        else
                continue
        fi
done
差别为,一个直接终止循环,一个终止不符合条件的输出,循环将继续。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值