Shell编程实例

1、统计目录下的文件个数并显示处理

#!/bin/bash

if [ $# -ne 1 ];then
	echo "Usage $(basename $0) : please enter a argument."
	exit 1
fi

if [ ! -d $1 ];then
	echo "$1 is not directory,please enter a directory path."
	exit 2
else
	cd $1
fi

sum=0

for i in `ls -r *`
do
	
	echo $i
	
	sum=$[ $sum + 1 ]	
	
done

echo "--------------------------"
echo "The total file is : $sum."

2、9*9乘法表

[root@lissen test_sh]# cat 9.sh

#!/bin/bash

for i in `seq 9`
do
	for j in `seq $i`
	do
		echo -ne "$j*$i=$[i*j]\t"
	done
	echo
done

3、编写输出字符“Hello World!”
[root@lissen test_sh]# cat 1.sh

#!/bin/bash

echo "Hello world!"

[root@lissen test_sh]# ./1.sh
Hello world!

4、 测试输入的是否以数字开头
[root@lissen test_sh]# cat 3.sh

#!/bin/bash

if [ $# -ne 1 ];then
	echo "Usage:Please enter 1 argument."
	exit
fi

var_a1=$1

if [[$var_a1 =~ ^[0-9] ]];then
	echo "The argument can't be started with number."
	exit 2
else
	echo $var_a1
fi

[root@lissen test_sh]# ./3.sh
Usage:Please enter 1 argument.
[root@lissen test_sh]# ./3.sh 1fffffff
The argument can’t be started with number.
[root@lissen test_sh]# ./3.sh gan
gan

if [ $# -ne 1 ];then
	echo "Usage $(basename $0) : please enter a argument."
	exit 1
fi

arg1=$1

--包含负数
****if [[ ! $arg1 =~ ^[-0-9][0-9]+$ ]];then****
	echo "$arg1 is not a number."
	exit 2
else
	echo "$arg1"
fi

5、 通过位置变量创建 Linux 系统账户及密码

#!/bin/bash

if [ $# -ne 2 ];then
	echo "Usage:`basename $0`:Please enter  2 arguments."
	exit
fi

var_user=$1
var_passwd=$2

if [[ $var_user =~ ^[0-9] ]];then
	echo "\$1:username can't be started with number."
	exit 1
else
	useradd $var_user
	echo "$var_passwd" | passwd --stdin "$var_user"
fi

6、 监控内存和磁盘容量,小于给定值时报警

[root@kkk my_shell]# cat 3.sh
#!/bin/bash


lv_disk_size=$(df -m | awk '/\/$/{print $4}')

lv_mem_size=$(free -m | awk '/Mem/ {print $4}')

#当磁盘空间小于等于20G或内存小于等于2G时发送报警信息到root的邮箱
if [ $lv_disk_size -le 20480 ] || [ $lv_mem_size -le 2048 ];then
	mail -s "Warning" root <<EOF
		Insufficient resources
EOF
fi

7、猜数字游戏
[root@lissen test_sh]# cat 1.sh

#!/bin/bash

num=$(( $RANDOM % 100 + 1 ))		#生成随机数1-100

#定义一个无线循环
while :
do
	read -p "A number is created by computed,please guess:" guess
#定义输入数字检查
if [[ ! $guess =~ ^[0-9]+$ ]];then
		echo "$guess is not a number."
		exit 1
	fi
if [ $guess -eq $num ];then
		echo "Right!"
		exit
	elif [ $guess -gt $num ];then
		echo "The number is big!"
	else
		echo "The number is small!"
	fi
done

[root@lissen test_sh]# ./1.sh
A number is created by computed,please guess:50
The number is big!
A number is created by computed,please guess:25
The number is small!
A number is created by computed,please guess:37
The number is big!
A number is created by computed,please guess:30
The number is big!
A number is created by computed,please guess:29
The number is big!
A number is created by computed,please guess:27
The number is small!
A number is created by computed,please guess:28
Right!

8、数字排序
由小到大排列数字

#!/bin/bash

read -p "Please enter a number: " num1
if [[ ! $num1 =~ ^[0-9]+$ ]];then
        echo "Usage:$num1 is not a number,Please enter Number !"
        exit 1
fi

read -p "Please enter a number: " num2

if [[ ! $num2 =~ ^[0-9]+$ ]];then
        echo "Usage:$num2 is not a number,Please enter Number !"
        exit 1
fi

read -p "Please enter a number: " num3

if [[ ! $num3 =~ ^[0-9]+$ ]];then
        echo "Usage:$num3 is not a number,Please enter Number !"
        exit 1
fi

tmp=0

if [ $num1 -gt $num2 ];then
	tmp=$num1
	num1=$num2
	num2=$tmp
fi

if [ $num1 -gt $num3 ];then
	tmp=$num1
	num1=$num3
	num3=$tmp
fi

if [ $num2 -gt $num3 ];then
	tmp=$num2
	num2=$num3
	num3=$tmp
fi

echo "The sort from min to max is: $num1 $num2 $num3"	

[root@lissen test_sh]# ./2.sh
Please enter an integer:90
Please enter an integer:80
Please enter an integer:60
The number sort is : 60,80,90

9、 编写脚本测试 192.168.59.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态
[root@lissen test_sh]# cat 3.sh

#!/bin/bash

i=1
while [ $i -le 254 ]
do
	ping -c 2 -i 0.3 -W 1 192.168.59.$i &>/dev/null
	if [ $? -eq 0 ];then
		echo "192.168.59.$i is up."
	else
		echo "192.168.59.$i is down."
	fi
	let i=$i+1
done

使用函数

[root@lissen test_sh]# cat 6.sh

```bash
#!/bin/bash

function myping()
{
i=1
while [ $i -le 254 ]
do
	ping -c 2 -i 0.3 -W 1 192.168.59.$i &>/dev/null

#将ping所有的输出都重定向到/dev/null中

	if [ $? -eq 0 ];then
		echo "192.168.59.$i is up."
	else
		echo "192.168.59.$i is down."
	fi
	let i=$i+1
done
}

myping

10、判断输入的年份是否为闰年

[root@kkk my_shell]# cat 4.sh

#!/bin/bash

read -n 4 -p "Please enter a year : " year

echo

if [[ ! $year =~ ^[0-9]+$ ]];then
	echo "$year is not a number."
	exit 1
fi

if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ];then
	echo "$year is ren year."
	exit 0
elif [ $[ $year%400  ] -eq 0 ];then
	echo "$year is ren year."
	exit 0
else
	echo "$year is not a ren year."
fi

[root@kkk my_shell]# ./4.sh
Please enter a year : 2015
2015 is not a ren year.
[root@kkk my_shell]# ./4.sh
Please enter a year : fafa
fafa is not a number.
[root@kkk my_shell]# ./4.sh
Please enter a year : 2008
2008 is ren year.

11、测试用户登录

#!/bin/bash

for i in $(seq 1 1 3)
do
	read -p "Please enter a username : " username
	read -p "Please eneter a passwd : " passwd

	if [ $username == "gan" ] && [ $passwd == "123456" ];then
		echo "Logon successful!"
		exit
	fi
done

echo "Logon failed!"

12、从键盘上读取积分并确定积分等级

#!/bin/bash

read -p "Please enter the integeral[0-100] : " JF

if [[ ! $JF =~ ^[-0-9][0-9]+$ ]];then
	echo "$JF is not a number."
	exit 1
elif [ $JF -gt 100 ] || [ $JF -lt 0 ];then
	echo "$JF must be in 0-100."
	exit 2
fi


if [ $JF -ge 80 ] && [ $JF -le 100 ];then
	echo "$JF is A."
elif [ $JF -ge 60 ] && [ $JF -lt 80 ];then
	echo "$JF is B."
elif [ $JF -ge 0 ] && [ $JF -lt 60 ];then
	echo "$JF is C."
fi

13、判断用户输入的数据类型(字母、数字或其他类型)

使用CASE语句

#!/bin/bash

read -n 1 -p "Please enter : " KEY

echo 

case $KEY in 
	[a-z]|[A-Z])
		echo "$KEY is a characater."
		;;
	[0-9])
		echo "$KEY is a number."
		;;
	*)
		echo "$KEY is other."
		;;
esac

使用IF语句

#!/bin/bash

read -n 1 -p "Please enter : " KEY

echo 


if [[ $KEY =~ ^[0-9]$  ]];then
	echo "$KEY is a number."
elif [[ $KEY =~ ^[a-z][A-Z]$ ]];then
	echo "$KEY is a character."
else
	echo "$KEY is other."
fi

14、判断输入的参数是否为目录或文件

#!/bin/bash

if [ $# -ne 1 ];then
	echo "Usage $(basename $0) : Please enter a argument."
	exit 
fi

if [ -d $1 ];then
	echo "Dirctory $1 exists."
elif [ -f $1 ];then
	echo "File $1 exists."
else
	echo "$1 is not a directory or a file."
	exit 2
fi

15、Shell简单运算

#!/bin/bash

read -p "Please enter a number : " num1

if [[ ! $num1 =~ ^[-0-9][0-9]+$ ]];then
	echo "$num1 is not a number."
	exit 1
fi

read -p "Please enter a number : " num2

if [[ ! $num2 =~ ^[-0-9][0-9]+$ ]];then
        echo "$num1 is not a number."
        exit 2
fi

#num3=$[ $num1 + $num2 ]

#num3=$(($num1 + $num2))

let num3=$num1+$num2

echo "$num1 + $num2 = $num3"
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值