当前位置 博文首页 > 5个Shell脚本编程入门练习例子

    5个Shell脚本编程入门练习例子

    作者:admin 时间:2021-02-20 15:04

    例子一:绘制特殊图形

    复制代码 代码如下:

    #!/bin/bash
     
    MAX_NO=0
     
    echo -n "Enter Number between (5 to 9) : "
     read MAX_NO
     
    if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then
     echo "WTF... I ask to enter number between 5 and 9, Try Again"
     exit 1
     fi
     
    clear
     
    for (( i=1; i=i; s-- ))
     do
     echo -n " "
     done
     for (( j=1; j=1; i-- ))
     do
     for (( s=i; s<=MAX_NO; s++ ))
     do
     echo -n " "
     done
     for (( j=1; j<=i; j++ ))
     do
     echo -n " ."
     done
     echo ""
     done
     
    echo -e "\n\n\t\t\t Whenever you need help, Tecmint.com is always there"

    你应该不会被上述例子中的“关键字”困扰了,很多都是你熟悉的,或者从它们的名字可以猜出它们的意思,如“max”设定某个变量的最大值,“for”是一个循环。

    输出结果:

    复制代码 代码如下:

    [root@tecmint ~]# chmod 755 Special_Pattern.sh
    [root@tecmint ~]# ./Special_Pattern.sh
    Enter Number between (5 to 9) : 6
           .
          . .
         . . .
        . . . .
       . . . . .
      . . . . . .
      . . . . . .
       . . . . .
        . . . .
         . . .
          . .
           .
     
            Whenever you need help, Tecmint.com is always there

    如果你有其它语言的编程基础,那么学习上面的脚本对你来说应该很容易。即使你是计算机方面的新手,这个学习过程也不会太难。

    例子二:五颜六色的脚本

    Linux终端也是支持五颜六色的,请看下面的脚本:

    复制代码 代码如下:

    #!/bin/bash
     
    clear
    echo -e "&#092;&#048;33[1m Hello World"
     # bold effect
    echo -e "&#092;&#048;33[5m Blink"
           # blink effect
    echo -e "&#092;&#048;33[0m Hello World"
     # back to noraml
     
    echo -e "&#092;&#048;33[31m Hello World"
     # Red color
    echo -e "&#092;&#048;33[32m Hello World"
     # Green color
    echo -e "&#092;&#048;33[33m Hello World"
     # See remaing on screen
    echo -e "&#092;&#048;33[34m Hello World"
    echo -e "&#092;&#048;33[35m Hello World"
    echo -e "&#092;&#048;33[36m Hello World"
     
    echo -e -n "&#092;&#048;33[0m"
      # back to noraml
    echo -e "&#092;&#048;33[41m Hello World"
    echo -e "&#092;&#048;33[42m Hello World"
    echo -e "&#092;&#048;33[43m Hello World"
    echo -e "&#092;&#048;33[44m Hello World"
    echo -e "&#092;&#048;33[45m Hello World"
    echo -e "&#092;&#048;33[46m Hello World"
     
    echo -e "&#092;&#048;33[0m Hello World"

    输出结果:



    你可以对上面的列子举一反三,把它用到你自己的脚本中去。

    例子三:加密文件/目录

    下面的例子演示了如何加密一个份文件或者文件夹。目前的这个版本的脚本有一些局限,例如你必须把它和你要加密的文件/目录放到同一个文件夹下面。另外,你可能需要安装“pinentry-gui”。在Fedora下安装“pinentry-gui”的命令是:

    复制代码 代码如下:
    [root@midstage ~]# yum install pinentry-gui

    在Ubuntu/Debian下安装“pinentry-gui”的命令是:
    复制代码 代码如下:
    [root@midstage ~]# apt-get install pinentry-gui

    创建一个脚本“Encrypt.sh”,将下面的代码复制进去。你也可以从这里下载这个脚本。
    复制代码 代码如下:

    #!/bin/bash
    echo "Welcome, I am ready to encrypt a file/folder for you"
    echo "currently I have a limitation, Place me to the same folder,
    where a file to be encrypted is present"
    echo "Enter the Exact File Name with extension"
    read file;
    gpg -c $file
    echo "I have encrypted the file sucessfully..."
    echo "Now I will be removing the original file"
    rm -rf $file

    输出结果:
    复制代码 代码如下:

    [root@tecmint ~]# chmod 755 Encrypt.sh
    [root@tecmint ~]# ./Encrypt.sh
     
    Welcome, I am ready to encrypt a file/folder for you
    currently I have a limitation, Place me to the same folder,
    where a file to be encrypted is present
    Enter the Exact File Name with extension
     
    package.xml
     
                       Enter passphrase
     
                       Passphrase _________________________________
     
     
                       Please re-enter this passphrase
     
                       Passphrase _________________________________
     
     
    I have encrypted the file successfully...
    Now I will be removing the original file

    代码说明:

    gpg -c: 这个命令使用aka来加密文件。 在你需要的时候,你需要对加密的文件进行解密。这里我们不给出具体的代码了,你可以自己尝试着写出来。提示:使用命令 gpg -d filename.gpg > filename 可以解密一份文件。

    例子四:查看服务器利用率

    查看服务器的利用率是管理员的一份重要的日常工作。聪明的管理员是知道如何是这份任务自动化的。下面的这份脚本会抓取服务器的很多信息,快快试试吧!

    复制代码 代码如下:

    #!/bin/bash
    date;
    echo "uptime:"
    uptime
    echo "Currently connected:"
    w
    echo "--------------------"
    echo "Last logins:"
    last -a |head -3
    echo "--------------------"
    echo "Disk and memory usage:"
    df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}'
    free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}'
    echo "--------------------"
    start_log=`head -1 /var/log/messages |cut -c 1-12`
    oom=`grep -ci kill /var/log/messages`
    echo -n "OOM errors since $start_log :" $oom
    echo ""
    echo "--------------------"
    echo "Utilization and most expensive processes:"
    top -b |head -3
    echo
    top -b |head -10 |tail -4
    echo "--------------------"
    echo "Open TCP ports:"
    nmap -p- -T4 127.0.0.1
    echo "--------------------"
    echo "Current connections:"
    ss -s
    echo "--------------------"
    echo "processes:"
    ps auxf --width=200
    echo "--------------------"
    echo "vmstat:"
    vmstat 1 5

    输出结果:
    复制代码 代码如下:

    [root@tecmint ~]# chmod 755 Server-Health.sh
    [root@tecmint ~]# ./Server-Health.sh
     
    Tue Jul 16 22:01:06 IST 2013
    uptime:
    22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
    Currently connected:
    22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    tecmint pts/0 116.72.134.162 21:48 0.00s 0.03s 0.03s sshd: tecmint [priv]
    --------------------
    Last logins:
    tecmint pts/0 Tue Jul 16 21:48 still logged in 116.72.134.162
    tecmint pts/0 Tue Jul 16 21:24 - 21:43 (00:19) 116.72.134.162
    --------------------
    Disk and memory usage:
    Free/total disk: 292G / 457G
    Free/total memory: 3510 / 3838 MB
    --------------------
    OOM errors since Jul 14 03:37 : 0
    --------------------
    Utilization and most expensive processes:
    top - 22:01:07 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
    Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
    Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.3%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
     
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1 root 20 0 3788 1128 932 S 0.0 0.0 0:32.94 init
    2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
    3 root RT 0 0 0 0 S 0.0 0.0 0:14.07 migration/0

    例子五:查看硬盘使用情况及发送提示邮件

    下面的这个例子展示了当硬盘的使用空间超出了预期设定的值时,如果通过脚本来发送提示邮件。

    复制代码 代码如下:
    MAX=95
    EMAIL=server@127.0.0.1
    PART=sda1
     
    USE=`df -h |grep $PART | awk '{ print $5 }' | cut -d'%' -f1`
    if [ $USE -gt $MAX ]; then
    echo "Percent used: $USE" | mail -s "Running out of disk space" $EMAIL
    fi

    说明:将上述脚本中的“USER”替换成你的用户名。你可以通过命令“mail”来查看你的邮件。

    js
    下一篇:没有了