练习 - shell脚本之if 和for 的使用

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

#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-09 14:41:30
#FileName:argsnum.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
#$@ 接收所有的参数,使用双引号标记,表示所有参数都是独立字符串,不是整体
DIRS="$@"
#$# 参数的个数
args_num=$#
# 初始空白行
line=0

if [ ${args_num} -lt 1 ];then
	echo -e "\033[1;31m至少应该给一个参数 \033[0m"
	exit 1
else
	dir=$1
	line=`cat ${dir} | grep ^$ |wc -l`
	echo -e "${dir}中的空白行共计\033[1;31m【${line}】\033[0m"
fi

2 编写脚本 hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提 示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

[root@CentOS8 scripts]#cat hostping.sh 
#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-09 16:09:52
#FileName:hostping.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
read -p "请输入要连接的ip 地址:" IPADDR

RED="\033[1;31m"
END="\033[0m"

if ! [[ ${IPADDR} =~ ^(([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
else
	ping -c1 -W3 ${IPADDR} &> /dev/null
	if [ $? -ne 0 ];then
		echo -e "${RED}该IP地址不可访问!!!${END}"
	else
		echo "该IP地址可访问"
	fi
fi

3 编写脚本 checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-09 16:09:52
#FileName:hostping.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
#1.获取磁盘分区的使用率
#2.遍历使用率,如果使用率超过80%,发送广播
for i in `df -h|tr -s ' ' %|cut -d% -f5|tail -n +2`
do
	#待改进,广播里没有告知是哪个磁盘分区
    if [ $i -ge 80  ];then
        wall "警告!磁盘分区使用率过高"
    fi
done

#3.获取inode使用率
#4.遍历使用率,如果使用率超过80%,发送广播
for i in `df -i|tr -s ' ' %|cut -d% -f5|tail -n +2`
do
	#待改进,广播里没有告知是哪个磁盘分区
    if [ $i -ge 80 ];then
        wall "警告!inode使用率过高!"
    fi
done

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

#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-09 20:09:10
#FileName:per.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
read -p "请输入要检测的文件" FILENAME

# -a filename 判断文件是否存在
if ! [ -a ${FILENAME} ];then
	echo -e "\033[1;31m请输入正确格式的文件\033[0m"
	exit 1
fi
# -r 判断是否具有可读权限,-w 判断是否具有可写权限,这里的 -a 表示 and
if ! [ -r ${FILENAME} -a -w ${FILENAME} ];then
	echo -e "\033[1;32m该文件不可读且不可写\033[0m"
else
	echo -e "\033[1;36m该文件正常\033[0m"
fi

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

#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-09 20:38:19
#FileName:excute.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
read -p "请输入需添加执行权限的文件" FILENAMES
if [ ${FILENAMES} -lt 1 ];then
	echo -e "\033[1;31m请输入文件\033[0m"
	exit 1
fi

for i in "$@"
do
	if [[ $i =~ *.sh$  ]];then
		chmod +x $i
		ls -l $i
	else
		echo -e "\033[1;33m文件${i}不是可执行文件\033[0m"
		continue
	fi
done

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

7 编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就 显示其存在,否则添加之;显示添加的用户的id号等信息

[root@CentOS8 scripts]#vim createuser.sh
#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-10 17:05:06
#FileName:createuser.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
if [ $# -eq 0 ];then
	echo -e "\033[1;31mArg is 1\033[0m"
	exit 1

#要求用户名合法化,即字母数字下划线组成,且不能以下划线开头
elif ! [[ $1 =~ ^[a-zA-Z][a-zA-Z0-9_]*$ ]];then
	echo -e "\033[1;31mUsername is invalid\033[0m"
	exit 2
else
	#判断用户是否存在
	i=`id $1 &> /dev/null`
	if [ $? -eq 0 ];then
		echo -e "\033[1;33m$1 exist\033[0m"
		exit
	else
		#待改进,设置随机密码,并保存到文件中
		useradd $1
		echo magedu | passwd --stdin $1 &> /dev/null
		USER_ID=`id -u $1`
		echo -e "\033[1;32m$1:${USER_ID} is created\033[0m"
	fi
fi

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

#方式一,使用if判断
#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-10 17:14:35
#FileName:yesorno.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
read -p "Please input yes or no(y/n):" ANS

if [[ ${ANS} =~ [[^yY]$|^[yY][Ee][Ss]$] ]];then
	echo "You say yes!"
elif [[ ${ANS} =~ [[^nN]$|^[nN][oO]$] ]];then
	echo "You say no!"
else
	echo "It's other answer!"
fi

#方式二,使用case判断
read -p "Do you agree(yes|no)? " INPUT

case $INPUT in
[yY]|[Yy][Ee][Ss])
	echo "your input is yes"
	;;
[nN]|[Nn][Oo])
	echo "your input is no"
	;;
*)
	echo "input false;please input yes or no!"
esac

9 编写脚本 fifiletype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)

#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-10 19:57:13
#FileName:filetype.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
if [ $# -eq 0 ];then
	echo -e "\033[1;31mArg is at least 1\033[0m"
	exit 1
else
	for i in "$@";do
		res=`test -a $i`
		if [ $res -ne 0 ];then
			echo -e "\033[1;31m文件[$i]不存在\033[0m"
			continue
		else
			file_type=`file $i |cut -d: -f2`
			echo ${file_type}		
		fi		
	done
fi

10 编写脚本 checkint.sh,判断用户输入的参数是否为正整数

#!/bin/bash
#********************************************************************
#Author:dawn
#Date:2020-08-10 21:10:36
#FileName:checkint.sh
#URL:https://blog.csdn.net/xiao_dan_
#Version:1.0
#Description:The test script
#********************************************************************
read -p "Please input a num: " num

# 可使用正则表达式,待写

#使用sed 替换所有数字和正负号,如果剩下字符串长度为0,表示整数,否则不是合法整数,注意:1.0属于浮点数
if [ -n "`echo ${num}|sed 's/[0-9+-]//g'`" ];then
	echo "${num} is not an integer"
else
	if [ ${num} -lt 0];then
		echo "${num} is a negative integer"
	else
		echo "${num} is a positive integer"
	fi
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值