日常杂记

简书初体验之作业习题

2020-11-21  本文已影响0人  还没帮马里奥再闯一关

作业

练习:

1、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小

#!/bin/bash
set -ue
. /date/sh/color.sh
$GREEN'*******************************************************************'$END
$GREEN HOSTNAME:`hostname`$END
$GREEN IP:`ifconfig ens33|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|head -1`$END
$GREEN OS:`cat /etc/centos-release`
$GREEN kernet:`uname -a`
$GREEN CPU:`cat /proc/cpuinfo |egrep -o "model name.*"|head -1|cut -d: -f2`
$GREEN Free:`free -h|egrep -o "Mem.*"|tr -s " " :|cut -d: -f2 `
$GREEN Disk Free:`lsblk|egrep sda|head -1|tr -s " " :|cut -d: -f5`                   $GREEN'*******************************************************************'$END

2、编写脚本 backup.sh,可实现每日将/etc/目录备份到/backup/etcYYYY-mm-dd中

#!/bin/bash
set -ue
DES=/backup/etc_`date +%F-%T`/
SOU=/etc/
cp -av $SOU $DES > /dev/null    #'cp -av' 递归复制,并保留文件的所有属性,且显示复制过程

3、编写脚本 disk.sh,显示当前硬盘分区中空间利用率最大的值

df -h |egrep  "^/dev/"|sort -nr|tr -s " " :|cut -d: -f1,5|head -1

4、编写脚本 links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

netstat -nat|tr -s " " \| |cut -d\| -f5|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -nr|uniq -c|head -1

练习

1、编写脚本 argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

$#: #传入脚本的参数个数;
$0:  #脚本自身的名称;  
$1:  #传入脚本的第一个参数;
$2:  #传入脚本的第二个参数;
$@:  #传入脚本的所有参数;
$*: #传入脚本的所有参数;
$$:  #脚本执行的进程id;
$?:  #上一条命令执行后的状态,结果为0表示执行正常,结果为1表示执行异常;
#其中$@与$*正常情况下一样,当在脚本中将$*加上双引号作为“$*”引用时,此时将输入的所有参数当做一个整体字符串对待。比如输入参数有a b c三个参数,则“$*”表示“a b c”一个字符串。
#!/bin/bash
if [ $# -lt 1 ];then    # $#表示这个脚本的参数个数
        echo "至少应该给一个参数"
        exit
elif [ -f $1 ];then                                                                                                                                                       
        grep  "^$" $1 | wc -l

else    # else 表示如果以上条件都为假的时候,执行下面的命令
        echo "请输入有效文件路径"
        exit

2、编写脚本 hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”3、编写脚本 checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

#!/bin/bash
. /date/sh/color.sh
read -p "请输入要测试的IPV4地址:" IP
if [[ ! $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]];then
    echo -e "$RED请输入正确的IP地址$END"
    exit 1
fi
if ping -c1 -w2 $IP &> /dev/null;then
    $GREEN"IP address is UP"$END
    else echo -e $RED"IP address IS Down"$END
fi
#!/bin/bash
set -ue
. /date/sh/color.sh
SPACE=`df|egrep -o [0-9]+%|tr -d %|sort -nr|head -1`
INODE=`df -i|egrep -o [0-9]+%|tr -d %|sort -nr|head -1` #[0-9]+  表示0-9的数字组合至少要出现1个以上
WARNING=0
[ "$SPACE" -gt $WARNING -o $INODE -gt $WARNING ] && echo "Disk_used:$SPACE, Inode_used:$INODE, will be full"|mail -s "disk warning" root 
You have new mail in /var/spool/mail/root

4、编写脚本 per.sh,判断当前用户对指定参数文件,是否不可读并且不可写

#!/bin/bash                                                                                                                   
FILE=$1
[ ! -r $FILE -a ! -w $FILE ] && echo "不可读且不可写"

5、编写脚本 excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件

#!/bin/bash
set -ue
read -p "请输入参数文件:" FILE
[ -f $FILE ] && [[ "$FILE" == *.sh ]] && chmod +x $FILE || echo "这不是脚本文件"

6、编写脚本 nologin.sh和 login.sh,实现禁止和允许普通用户登录系统

echo "System maintenance, no landing" > nologin #在/etc 执行该命令可以禁止普通用户登陆,但是root不受影响

练习

1、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin

vim ~/.bash_profile

2、用户 root 登录时,将命令指示符变成红色,并自动启用如下别名: rm=‘rm –i’

 编写root对应账户下得.bashrc

3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous!”

vim /etc/issue  #输入你想显示的内容

4、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等


练习

1、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之。并设置初始密码为123456,显示添加的用户的id号等信息,在此新用户第一次登录时,会提示用户立即改密码,如果没有参数,就提示:请输入用户名

#!/bin/bash
read -p "please input Newusername:" NAME        
if [ -z "$NAME" ];then
    echo "not empty"
    exit 1
elif id $NAME &> /dev/null;then
    echo "User exist!"
elif useradd -p abc123456 $NAME;then
    chage -d 0 $NAME
    echo "Create a new user:$NAME,UID:`id $NAME`"
fi

#!/bin/bash
set -ue
read -p "Please input username:" NAME
if [ -z $NAME ];then
    echo "User name is empty"
    exit 1
elif id $NAME &> /dev/null;then
    echo "user exist"
    exit 2
elif useradd -p abc123456 $NAME;then
    echo "success"
fi

2、编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息

知识点

#[[ ]]用法,建议,当使用正则表达式或通配符使用,一般情况使用 [ ]
==左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN为通配符
=~左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
注意: 此表达式用于[[ ]]中;扩展的正则表达式

#!/bin/bash #编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
set -ue
read -p "请输入yes or no:" ANSWER
if [[ $ANSWER =~ ^[yY][Ee][Ss]$ ]];then
    echo "You input is: yes"
elif [[ $ANSWER =~ ^[Nn][Oo] ]];then
    echo "You input is: no"
else 
    echo "input erro"
fi
----------------------------------------------
#!/bin/bash
read -p "Do you agree(yes/no)? " INPUT
case $INPUT in
[yY]|[Yy][Ee][Ss])
    echo "You input is YES"
   ;;
[Nn]|[Nn][Oo])
    echo "You input is NO"
   ;;
*)
    echo "Input fales,please input yes or no!"                 
esac
----------------------------------------------
#!/bin/bash
read -p "Do you agree(yes/no)? " INPUT
INPUT=`echo $INPUT | tr 'A-Z' 'a-z'`
case $INPUT in
y|yes)
      echo "You input is YES"
     ;;
n|no)
      echo "You input is NO"
     ;;
*)
      echo "Input fales,please input yes or no!"
esac

3、编写脚本 fifiletype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)4、编写脚本 checkint.sh,判断用户输入的参数是否为正整数

#!/bin/bash
set -ue
read -p "Please enter the file path:" FILE_PATH
[ -z $FILE_PATH ] && (echo "The file path is empty";exit 1)
TYPE=`ls -l $FILE_PATH|cut -c 1`
case $TYPE in
    -)
    echo "File type is general file"
    ;;
    b)
    echo "File type is block file"
    ;;
    d)
    echo "File type is directory file"
    ;;
    l)
    echo "File type is link file"
    ;;
    p)
    echo "File type is pipeline file"
    ;;
    s)
    echo "File type is socket file"
    ;;
    c)
    echo "File type is character file"
    ;;
esac
---------------------------------------------------------------------------
#判断一个数字是否为整数
#!/bin/bash
read -p "Please input a string:" STRING
[ -z $STRING ] && { echo "Please input string";exit 1; }
[[ $STRING =~ ^[0-9]+$ ]] || { echo "please input digit";exit 2; }
if [ $STRING -gt 0 ];then
    echo "The digit is int"
fi

5、编写脚本 reset.sh,实现系统安装后的初始化环境,包括:1、别名 2、环境变量,如PS1等 3、安装常用软件包,如:tree 5、实现固定的IP的设置,6、vim的设置等


上一篇下一篇

猜你喜欢

热点阅读