shell腳本練習

習題1:打印99乘法表

#!/bin/bash
#
for ((j=1;j<=9;j++))
do
    for ((i=1;i<=j;i++))
    do
        echo -e -n "${i}x${j}=$[${i}*${j}]\t"
    done
    echo
done

習題2:寫一個腳本
(1)創建目錄/tmp/dir-當前日期時間;例如/tmp/dir-20150707-155503。
(2)在此目錄中創建10個空文件,分別為file1-file10;

#!/bin/bash
basedir=/tmp/dir-`date +%Y%m%d-%H%M%S`
mkdir -p $basedir
for d in {1..10}
do
    touch $basedir/file$d
done

習題3:寫一個腳本
(1)創建用戶tuser1-tuser9; 
(2)創建目錄/tmp/dir-當前日期;
(3)在/tmp/dir-當前日期 目錄中創建9個空文件file101-file109
(4)將file101的屬主改為tuser1,依次類推,一直將file109的屬主改為tuser9;

#!/bin/bash
basedir=/tmp/dir-`date +%Y%m%d`
mkdir -p $basedir
for d in {1..9} ;do
    filename=$basedir/file10$d
    touch $filename
    useradd tuser$d
    chown tuser$d $filename
done

習題4:寫一個腳本,完成以下任務。
(1)添加5個用戶,user1-user5,每個用戶的密碼同用戶名
(2)添加密碼完成后不顯示passwd執行結果
(3)顯示添加成功信息

#!/bin/bash
for i in `seq 5`
do
    username=user${i}
    useradd $username
    echo $username | passwd --stdin $username &> /dev/null
    echo "$username created successfully"
done

習題5:寫一個腳本
(1)腳本可以接受一個以上的文件路徑作為參數;
(2)顯示每個文件所擁的行數;

#!/bin/bash
for file in $*
do
    lines=`wc -l $file | cut -d' ' -f1`
    echo "$file has $lines lines."
done

習題6:寫一個腳本,不使用awk
顯示/etc/passwd文件中位于文件的第偶數行的用戶名;并顯示共有多少個這樣的用戶

#!/bin/bash
totalUsers=`wc -l /etc/passwd | cut -d' ' -f1`
for i in `seq 2 2 $totalUsers`; do
    userName=`head -n $i /etc/passwd | tail -1 | cut -d: -f1`
    echo $userName
    echo $userName >> /tmp/count.tmp
done
echo "Total users: `wc -l /tmp/count.tmp | cut -d' ' -f1` ."

習題7:指定一個用戶名,判斷此用戶的用戶名和它的基本組的組名是否相同

#!/bin/bash
if [ $# -ne 1 ] ;then
    echo "agrs error"
    exit 3
fi

if ! id $1 &>/dev/null ;then
        echo "$1 Not Exsits"
        exit 4
fi

username=$1
groupname=`id $username -gn`
if [ "$username" == "$groupname" ]
then
    echo "Same."
else
    echo "Not same."
fi

習題8:判斷當前主機的CPU生產商,(其信息保存在/proc/cpuinfo文件中)
如果是:AuthemticAMD,就顯示其為AMD公司
如果是:GenuineIntel,就顯示其為 Intel公司
否則,就顯示其為其他公司。

#!/bin/bash
CPU=`egrep "^vendor_id" /proc/cpuinfo | tail -1 | cut -d: -f2`
if [ $CPU == 'GenuineIntel' ] ;then
    echo "Intel"
elif [ $CPU == 'AuthemticAMD' ] ;then
    echo "AMD"
else
    echo "Other"
fi

習題9:給定三個用戶名,將這些用戶的帳號信息提取出來,然后放入/tmp/test.txt文件中,并在行首給定行號。

#!/bin/bash
if [ $# -ne 3 ] ;then
    echo "agrs error"
    exit 3
fi
i=0
for user in $*
do
    let i++
    echo -e "$i\t`grep "^$user:" /etc/passwd`" >> /tmp/test.txt
done

習題10:依次向/etc/passwd中的每個用戶問好:hello 用戶名,并顯示用戶的shell
例如:Hello  ,root  ,your shell :/bin/bash。

#!/bin/bash
#
awk -F':' '{print "hello,",$1,"  your shell :",$7}' /etc/passwd

習題11:計算100以內所有能被3整除的整數的和

#!/bin/bash
#
SUM=0
for i in `seq 3 3 100`
do
    let SUM+=$i
done
echo "sum: $SUM"

習題12:查詢當前192.168.1.x網段內,那些IP被使用了,輸出這些IP到一個文件中。

#!/bin/bash
#
for i in {1..254}
do
    IP=192.168.1.$i
    if ping -w 1 -q $IP  ;then
        echo $IP >> /tmp/ips.txt
    fi
done

原創文章,作者:XIAJIDONG,如若轉載,請注明出處:http://www.www58058.com/76714

(0)
XIAJIDONGXIAJIDONG
上一篇 2017-05-22 20:50
下一篇 2017-05-22 21:29

相關推薦

  • Linux 啟動流程

    Linux啟動流程 POST–>Boot Sequence–>MBR–>Grub–>Kernel(initramfs)–>rootfs–chroot(根切換)–>/sbin/init–>RunLevel–&gt…

    Linux干貨 2016-06-09
  • RAID簡介

    RAID是什么? RAID英文名字叫Redundant Arrays of Independent Disks,也叫磁盤陣列?陣列有是什么意思?通俗的理解就是把很多的硬盤組織在一起來使用。       RAID可以根據性能來劃分為兩種:有無冗余(容錯)能力     &n…

    Linux干貨 2016-02-14
  • Tomcat 全系列發現嚴重安全漏洞

    據 Tomcat 安全組確認,Tomcat 全系列產品均被發現嚴重安全漏洞:CVE-2014-0227 請求夾帶漏洞。 級別:嚴重 受影響版本: Apache Tomcat 8.0.0-RC1 to 8.0.8 Apache Tomcat 7.0.0 to 7.0.54 Apache Tomcat 6.0.0 to 6.0.41 描述:可以通過構造一個截斷請…

    Linux干貨 2015-02-11
  • 腳本編程之變量

    簡單跟大家介紹一下腳本編程中的變量。 大家都知道,腳本編程,主要由三個部分組成,一是命令,二是變量,三是控制語句。 變量的使用,可以讓腳本變得更加簡潔,高效。 我們主要簡單講一下變量的概念,變量的類型,變量的種類,不同種類的變量是如何定義的,變量的基本操作,以及變量的配置文件。 了解了這些,我們還可以聊一聊變量的高級操作。 首先,什么是變量? 通俗一點講:變…

    Linux干貨 2017-04-17
  • N21_第5周作業find

    第5周作業 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@iZ28zld7ztoZ ~]# grep '^[[:space:]]' /boot/grub/grub.conf [root@iZ28zld7ztoZ ~]# grep&nbsp…

    Linux干貨 2016-08-08
  • 第二周作業

    第一、文件管理類命令     cp、mv、rm                  cp命令:copy 源文件;目標文件;     &nbsp…

    Linux干貨 2016-12-12
欧美性久久久久