shell 基础练习题
1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小
#!/bin/bash
echo -e "\e[1;35mThis computer is hosted by: \e[0m"
hostname
echo " "
echo -e "\e[1;35mMy ip addr is:\e[0m"
ifconfig | sed -n '2p'|sed -r '[email protected]*inet (.*) net.*@\[email protected]'
echo " "
#
echo -e "\e[1;35mMy OS version is:\e[0m"
cat /etc/centos-release
echo " "
echo -e "\e[1;35mMy CPU is: \e[0m"
lscpu
echo " "
echo -e "\e[1;35mMy memory is: \e[0m"
free -m
echo " "
echo -e "\e[1;35mMy disk is: \e[0m"
lsblk | sed -n '2p'
2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中
#!/bin/bash
echo -e "\e[1;35mbackup ing.... \e[0m"
sleep 3
cp -av /etc/ /data/etc`date +%F`
echo -e "\e[1;35mbackup is done \e[0m"
3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
#!/bin/bash
echo -e "\e[1;35mThe biggst ratio of your disk's space is \e[0m"
df | grep "/dev/sd" | tr -s " " % | cut -d% -f5 | sort -nr | head -n1
4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
5、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和
#!/bin/bash
[ $# -ne 2 ] && echo "Args num must be 2" && exit
[[ ! "$1" =~ ^[0-9]+$ ]] && echo "$1 is not digital" && exit
[[ ! "$2" =~ ^[0-9]+$ ]] && echo "$2 is not digital" && exit
UID1="`head -n$1 /etc/passwd | cut -d: -f3 |tail -n1`"
UID2="`head -n$2 /etc/passwd | cut -d: -f3 |tail -n1`"
sumid=$[$UID1+$UID2]
echo $sumid
6、编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
#!/bin/bash
echo -e "\e[1;35mThe files's blankline is : \e[0m"
grep ^$ $1 $2 | wc -l
7、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
#!/bin/bash
echo -e "\e[1;35mThe number of /etc /var /usr is : \e[0m"
a="`find /etc -maxdepth 1 |wc -l`"
b="`find /usr -maxdepth 1 |wc -l`"
c="`find /var -maxdepth 1 |wc -l`"
sum=$[a+b+c]
echo $sum
8、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数
#!/bin/bash
[ $# -lt 1 ] && echo -e "\e[1;33m至少应该有一个参数 \e[0m" && exit
[ $# -ge 1 ] && grep ^$ $1 $2 $3 |wc -l
9、编写脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”
10、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
#!/bin/bash
a="`df | grep "/dev/sd.*" | tr -s " " % |cut -d% -f5 | sort -nr | head -n1`"
b="`df -i | grep "/dev/sd.*" | tr -s " " % |cut -d% -f5 | sort -nr | head -n1`"
[ $a -ge 80 ] && echo -e "\e[1;35mYour disk space is warmming!! \e[0m"
[ $b -ge 80 ] && echo -e "\e[1;35mYour inode numbers is warmming!! \e[0m"
11、编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写
#!/bin/bash
[ -r $1 -a -w $1 ] || echo -e "\e[1;35m您对此文件无读写权限 \e[0m"
12、编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件
#!/bin/bash
[[ $1 =~ \.sh$ ]] && [[ -f $1 ]] || { echo -e "\e[1;35m该文件非脚本文件 \e[0m" ; exit; }
chmod +x $1
echo -e "\e[1;35m该文件已添加X权限 \e[0m"
13、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
nologin.sh
#!/bin/bash
echo -e "\e[1;35mYOU WILL OPEN NOLOGIN,PLEASE WAIT \e[0m"
[ -a /etc/nologin ] && exit || touch /etc/nologin
echo -e "\e[1;35mdone!!!\e[0m"
login.sh
#!/bin/bash
[ -e /etc/nologin ] && `rm -f /etc/nologin` || echo -e "\e[1;35mnow,you can login \e[0m"
14、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin
在 /etc/profile.d/env. sh 文件,重新添加PATH变量。
PS1="\[\e[1;36m\][\[email protected]\h \W]\\$\[\e[0m\]"
PATH=/usr/local/apache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
15、用户root登录时,将命令指示符变成红色,并自动启用如下别名:
rm=‘rm –i’
cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’ (如果系统是CentOS7)
命令符红色:
在/etc/profile.d/env.sh中定义
PS1="\[\e[1;31m22\][\[email protected]\h \W]\\$\[\e[0m\]"
定义别名:
在 ~/.bashrc中将放入以下命令:
alias rm=‘rm –i’
alias cdnet=‘cd /etc/sysconfig/network-scripts/’
alias editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
alias editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’
3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous !”
在/etc/profile.d/env.sh 中添加
echo -e "\e[1;31mHi,dangerous ! \e[0m"
16、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
17、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等
```bash
vim /root/reset.sh
原文地址:https://www.cnblogs.com/sstjustdoit/p/10049065.html