目录
if
#批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456
#!/bin/bash
#批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456
userfile=/root/users.txt
for name in $(cat $userfile)
do
useradd $name
echo 123456 | passwd --stdin $name &> /dev/null
done
echo "批量添加用户完成"
#禁用当前系统除了root用户以外的可登录用户
#!/bin/bash
#禁用当前系统除了root用户以外的可登录用户
usrname=$(cat /etc/passwd | grep "/bin/bash$" | grep -v "^root" | awk -F: '{print $1}')
for iname in $usrname
do
#echo $iname
usermod -L $iname
done
#根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性
#!/bin/bash
#根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性
filepath=/root/for/ipadds.txt
for hostip in $(cat $filepath)
do
ping -c 4 -i 0.5 -W 2 $hostip &> /dev/null
if [ $? -eq 0 ];then
echo "$hostip is online" >> /root/for/result.txt
else
echo "$hostip is offline">> /root/for/result.txt
fi
done
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.10 20 30 40 50 60主机的连通性
#!/bin/bash
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.10 20 30 40 50 60主机的连通性
for num in {1..6}
do
hostip="192.168.80.${num}0"
ping -c 4 -i 0.5 -W 2 $hostip &> /dev/null
if [ $? -eq 0 ];then
echo "$hostip is online"
else
echo "$hostip is offline"
fi
done
#用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码:若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash
#用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码:若该用户不存在,提示用户输入密码,建立用户并设立其密码
usrfile=/root/users.txt
#循环遍历文件里的每行用户
for iname in $(cat $usrfile)
do
#判断是否存在
grep "^$iname" /etc/passwd &> /dev/null
if [ $? -eq 0 ];then
echo "$iname 用户已存在"
#判断用户是否设置密码
userpasswd=$(cat /etc/shadow | grep "^$iname" | awk -F: '{print $2}')
if [ "$userpasswd" == "!!" ] || [ "$userpasswd" == "*" ] || [ -z "$userpasswd" ];then
echo "$iname 用户没设密码。"
read -p "请设置 $iname 用户的密码:" pd1
read -p "请确认设置 $iname 用户的密码:" pd2
if [ "$pd1" == "$pd2" ];then
echo $pd1 | passwd --stdin $iname &> /dev/null
else
echo "密码输入不正确,放弃设置...."
fi
fi
else
#创建不存在的用户并设置密码
echo "$iname 用户不存在,正常创建用户....."
read -p "请设置 $iname 用户的密码:" password1
read -p "请确认设置 $iname 用户的密码:" password2
if [ "$password1" == "$password2" ];then
useradd $iname
echo $password1 | passwd --stdin $iname &> /dev/null
else
echo "密码输入不正确,放弃设置...."
fi
fi
done
#输出1到10的整数,并判断奇偶数
#!/bin/bash
#输出1到10的整数,并判断奇偶数
for ((i=1; i<=10; i++))
do
a=$[i % 2]
if [ $a -eq 1 ];then
echo "$i 为奇数"
else
echo "$i 为偶数"
fi
done
#求1到10的和
#!/bin/bash
#求1到10的和
sum=0
for ((i=1; i<=10; i++))
{
sum=$[sum + $i]
}
echo "1到10的和为 $sum"
#猴子摘下了n个香蕉,当天吃掉一半多一个,第二天也是吃掉剩下香蕉一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?
#!/bin/bash
#猴子摘下了n个香蕉,当天吃掉一半多一个,第二天也是吃掉剩下香蕉一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?
n=1
for ((i=1; i<=9; i++))
do
n=$[(n+1)*2]
done
echo "第一天摘了 $n 个香蕉"
#自动生成一个8位数的随机密码,密码范围可以是小大写字母和数字
#!/bin/bash
#自动生成一个8位数的随机密码,密码范围可以是小大写字母和数字
STR="0123456789shicaijundashuaigeABCDEFGHIJKLMNOPQRSTUVWXYZ"
for ((i=1; i<=8; i++))
do
#获取字符串所有下标的随机数
num=$[RANDOM % ${#STR}]
#根据随机下标获取一个随机字符
passd=${STR:num:1}
#将随机字符进行拼接
password+=$passd
done
echo "8位随机密码为 $password"
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.0~255 的主机,获取在线的主机清单
#!/bin/bash
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.0~255 的主机,获取在线的主机清单
for num in {0..255}
do
{
hostip="192.168.80.$num"
ping -c 4 -i 0.5 -W 2 $hostip &> /dev/null
if [ $? -eq 0 ];then
echo "$hostip is online" >> /root/host.txt
fi
}&
done
wait
cat /root/host.txt
#输出PATH环境变量的目录里所有以xy开头的文件
#!/bin/bash
#输出PATH环境变量的目录里所有以xy开头的文件
IFS_OLD=$IFS
IFS=$IFS':'
for i in $PATH
do
#ls $i/xy* 2> /dev/null
find $i -name "xy*" -print 2> /dev/null
done
#求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89...,数列从第3项开始每一项等于前两项之和,打印前10个元素
#!/bin/bash
#求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89...,数列从第3项开始每一项等于前两项之和,打印前10个元素
first=1
second=1
for ((i=1; i<=10; i++))
do
echo $first
C=$[first + second]
first=$second
second=$C
done
for遍历循环
#输出PATH环境变量的目录里所有以se开头的文件
#!/bin/bash
#输出PATH环境变量的目录里所有以se开头的文件
IFS_OLD=$IFS
IFS=$IFS':'
for folder in $PATH
do
find $folder -name "se*" 2> /dev/null
done
IFS=$IFS_OLD
#求裴波拉切数列中的前十二个数值
#!/bin/bash
#求裴波拉切数列中的前十二个数值
#前一个数
a=1
#后一个数
b=1
for i in {1..12}
do
echo $a
#获取第三个数值
c=$[a + b]
#设置下次的前一个数的值为原第二个数的值
a=$b
#设置下次的后一个数的值为原第三个数的值
b=$c
done
#使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
#!/bin/bash
#使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
#减法正排
read -p "请输入一个0-255的整数:" num
#for i in 128 64 32 16 8 4 2 1
a=256
for ((i=1; i<=8; i++))
do
a=$[a / 2]
result=$[num - a]
if [ $result -lt 0 ];then
echo -n 0
else
echo -n 1
let num-=$a
fi
done
echo ''
二进制到十进制转换
#!/bin/bash
read -p "请输入一个0-255的整数:" num
for i in {1..8}
do
yushu=$[num % 2]
num=$[num / 2]
result=$yushu$result
done
echo $result
#将一个200行的文件分割成多个50行的文件
#!/bin/bash
#将一个200行的文件分割成多个50行的文件
filepath=/root/day10/test.txt
#定义行数计数器变量
a=0
#定义文件序号变量
i=1
IFS_OLD=$IFS
IFS=$'\n'
for line in $(cat $filepath)
do
let a++
#判断是否已经读入50行,满50行则文件序号+1
c=$[a % 50]
if [ $c -eq 0 ];then
echo $line >> /root/day10/test${i}.txt
let i++
else
echo $line >> /root/day10/test${i}.txt
fi
done
IFS=$IFS_OLD
while
#写个脚本实现 猜测0-999的随机价格,猜不中则一直猜
#!/bin/bash
#写个脚本实现 猜测0-999的随机价格,猜不中则一直猜
PRICE=$[RANDOM % 1000]
a=1
b=0
while [ $a -eq 1 ];
do
read -p "请输入你猜测的价格(0-999):" NUM
let b++
if [ $NUM -eq $PRICE ] && [ $b -le 5 ];then
echo "恭喜!你猜中了!!"
exit 0
elif [ $NUM -gt $PRICE ] && [ $NUM -le 999 ];then
if [ $b -lt 5 ];then
echo "猜大了!!请重猜"
else
echo "真遗憾,猜测次数用完!"
exit 1
fi
elif [ $NUM -le $PRICE ] && [ $NUM -ge 0 ];then
if [ $b -lt 5 ];then
echo "猜小了!!请重猜"
else
echo "真遗憾,猜测次数用完!"
exit 2
fi
else
echo "输入有误!请重新输入!!"
fi
done
#批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456
#!/bin/bash
#批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456
i=1
while [ $i -le 20 ]
do
useradd stu$i &> /dev/null
echo 123456 | passwd --stdin stu$i > /dev/null
echo "stu$i用户密码已创建完毕"
let i++
done
#计算从1到100所有整数的和
#!/bin/bash
#计算从1到100所有整数的和
a=1
sum=0
read -p "请输入一个1到100的整数:" num
if [ $num -ge 1 ] && [ $num -le 100 ];then
while [ $a -le $num ]
do
let sum+=a
let a++
done
echo "1到100总和为$sum"
else
echo "输入有误!"
fi
#求从1到100所有整数的偶数和、奇数和
#!/bin/bash
#求从1到100所有整数的偶数和、奇数和
a=1
jisum=0
ousum=0
while [ $a -le 100 ]
do
b=$[a % 2]
if [ $b -eq 0 ];then
let ousum+=$a
else
let jisum+=$a
fi
let a++
done
echo -e "奇数和为 $jisum\n偶数和为 $ousum"
#每10秒检查系统内存使用率是否超过80%
#!/bin/bash
#每10秒检查系统内存使用率是否超过80%
while true
do
memused=$(free | grep Mem | awk '{print $3}')
memtotal=$(free | grep Mem | awk '{print $2}')
usedpercent=$[memused * 100 / memtotal]
if [ $usedpercent -ge 20 ];then
echo "警告!当前系统内存使用率超过80%,当前使用率为 ${usedpercent}%"
fi
sleep 10
done
#用while循环将一个200行的文件分割成多个50行的文件
#!/bin/bash
#用while循环将一个200行的文件分割成多个50行的文件
filepath=/root/day10/test.txt
#定义行数计数器变量
a=0
#定义文件序号变量
i=1
cat $filepath | while read line
do
let a++
#判断是否已经读入50行,满50行则文件序号+1
c=$[a % 50]
if [ $c -eq 0 ];then
echo $line >> /root/day10/test${i}.txt
let i++
else
echo $line >> /root/day10/test${i}.txt
fi
done
#将一个点分十进制格式的IP地址转换成点分二进制格式
#!/bin/bash
#将一个点分十进制格式的IP地址转换成点分二进制格式
IP="192.168.80.30"
n=0
#外循环分割出IP的每段数值
for ((i=1; i<=4; i++))
do
num=${IP%%.*}
IP=${IP#*.}
#echo $num
#每次开始内循环前将result变量值清空
result=''
#内循环使用余数倒排法进行数值转换
for j in {1..8}
do
yushu=$[num % 2]
num=$[num / 2]
result=$yushu$result
done
let n++
#使用n变量作为计数器,当n=4即转换IP的第4段数值后不再使用echo -n
if [ $n -lt 4 ];then
echo -n ${result}.
else
echo $result
fi
done
#输出PATH环境变量的目录里所有以se开头的不可执行文件
#!/bin/bash
#输出PATH环境变量的目录里所有以se开头的不可执行文件
IFS_OLD=$IFS
IFS=$IFS':'
for folder in $PATH
do
file=$(find $folder -name "se*" 2> /dev/null)
for i in $file
do
if [ ! -x $i ];then
echo $i
fi
done
done
IFS=$IFS_OLD
内循环外循环
#!/bin/bash
for ((a=1; a<=5; a++))
do
echo "外循环a等于$a"
for ((b=1; b<=5; b++))
do
echo -e "\t内循环b等于$b"
if [ $b -ge 2 ] && [ $b -le 4 ];then
continue
fi
echo -e "\t\tHello World"
done
done
#!/bin/bash
a=1
while [ $a -le 5 ]
do
echo "外循环a等于$a"
let a++
b=0
while [ $b -lt 5 ]
do
let b++
echo -e "\t内循环b等于$b"
if [ $b -eq 3 ];then
continue
fi
echo -e "\t\tHelloWorld"
done
done
#99乘法表
#!/bin/bash
#99乘法表
for ((second=1; second<=9; second++))
do
for ((first=1; first<=second; first++))
do
echo -n -e "${first}*${second}=$[first*second]\t"
done
echo ''
done
#输出由20个*组成的直线
#!/bin/bash
#输出由20个*组成的直线
for ((i=1; i<=20; i++))
do
echo -n '*'
done
echo ''
#输出长度为9个*,4行的矩形
#!/bin/bash
#输出长度为9个*,4行的矩形
for ((a=1; a<=4; a++))
do
for ((b=1; b<=9; b++))
do
echo -n '*'
done
echo ''
done
#正直角三角形
#!/bin/bash
#正直角三角形
#外循环控制三角的行数
for ((a=9; a>=1; a--))
do
#内循环控制每行输出的 * 的数量,第一行输出一个*,每行递增
for ((b=9; b>=a; b--))
do
echo -n "*"
done
echo ""
done
#倒直角三角形
#!/bin/bash
#倒直角三角形
#外循环控制行数
for ((a=1; a<=9; a++))
do
#内循环控制每行输出的*数量,第一行输出最多,每行做递减
for ((b=9; b>=a; b--))
do
echo -n "*"
done
echo ""
done
#等腰三角形
#!/bin/bash
#等腰三角形
read -p "请输入三角形的大小数值:" num
#控制三角形的行数
for ((a=1; a<=num; a++))
do
#输出倒三角每行的空格数,第一行4个,第二行3个,每行做递减
for ((i=num; i>a; i--))
do
echo -n " "
done
#输出等腰三角每行的*数,第一行输出1个,第二行3个,第三行5个,以此类推
c=$[(a*2)-1]
for ((b=1; b<=c; b++))
do
echo -n "*"
done
echo ""
done
#倒等腰三角形,5行
#!/bin/bash
#倒等腰三角形,5行
#外循环控制三角的行数
for ((a=5; a>=1; a--))
do
#输出空格正三角
for ((b=5; b>a; b--))
do
echo -n " "
done
#输出倒等腰三角
c=$[(a*2)-1]
for ((i=1; i<=c; i++))
do
echo -n "*"
done
echo ""
done
#菱形
#!/bin/bash
#菱形
read -p "请输入大小数值:" num
for ((a=1; a<=num; a++))
do
for ((i=num; i>a; i--))
do
echo -n " "
done
c=$[(a*2)-1]
for ((b=1; b<=c; b++))
do
echo -n "*"
done
echo ""
done
for ((a=num-1; a>=1; a--))
do
#输出空格正三角
for ((b=num; b>a; b--))
do
echo -n " "
done
#输出倒等腰三角
c=$[(a*2)-1]
for ((i=1; i<=c; i++))
do
echo -n "*"
done
echo ""
done
#写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/bin/bash
#写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#店数的变量
n=1
#购物总额的变量
sum=0
while true
do
echo "来到第${n}家商店的门口"
read -p "是否进店逛逛?(yes/no)" doing
until [ "$doing" == "no" ]
do
echo -e "欢迎光临!\n1:衣服¥500\n2:裤子¥400\n3:鞋子¥300\n4:帽子¥200\n5:袜子¥100\n6:放弃购买"
read -p "请选择需要购买的商品序号:" num
case $num in
1)
echo "衣服购买成功"
let sum+=500
;;
2)
echo "裤子购买成功"
let sum+=400
;;
3)
echo "鞋子购买成功"
let sum+=300
;;
4)
echo "帽子购买成功"
let sum+=200
;;
5)
echo "袜子购买成功"
let sum+=100
;;
6)
echo "放弃购买"
;;
*)
echo "输入错误"
esac
read -p "是否继续在这家店购物?(yes/no)" doing
done
read -p "是否继续逛下一家店?(yes/no)" going
if [ "$going" == "yes" ];then
let n++
else
break
fi
done
echo -e "一共逛了${n}家店,\n合计总消费为${sum}元"
#通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
#通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
length=$(echo $PATH | awk -F: '{print NF}')
path=$PATH
for ((i=1; i<=length; i++))
do
folder=${path%%:*}
path=${path#*:}
find $folder -type d
files=$(find $folder -type f)
for j in $files
do
if [ ! -x $j ];then
echo "$j 为不执行文件"
fi
done
done
#等腰三角 图形拼接的方式
#!/bin/bash
#等腰三角 图形拼接的方式
#控制三角形的行数
for ((a=1; a<=9; a++))
do
#输出空格倒三角
for ((i=9; i>a; i--))
do
echo -n " "
done
#输出正直角三角
for ((b=1; b<=a; b++))
do
echo -n "*"
done
#输出小一号的正直角三角,第一行不输出*
for ((c=1; c<a; c++))
do
echo -n "*"
done
#每行换行
echo ""
done
#判断挂载点目录/cdrom是否存在,若存在则挂载光盘镜像,若不存在则自动创建目录并挂载光盘镜像,注:光盘镜像不知是否存在。
#!/bin/bash
#判断挂载点目录/cdrom是否存在,若存在则挂载光盘镜像,若不存在则自动创建目录并挂载光盘镜像,注:光盘镜像不知是否存在。
function mountcdrom {
if [ -b /dev/sr0 ];then
mount /dev/sr0 /cdrom
else
echo "光盘镜像文件不存在,请确认。。。。"
fi
}
mountsr0() {
if [ -b /dev/sr0 ];then
mount /dev/sr0 /cdrom
else
echo "光盘镜像文件不存在,请确认。。。。"
fi
}
if [ -d /cdrom ];then
#挂载
mountcdrom
else
#创建目录再挂载
mkdir /cdrom
mountsr0
fi
#函数的返回值
#!/bin/bash
#函数的返回值
db1() {
read -p "请输入一个整数:" num
sum=$[$num * 2]
#return $sum
echo $sum
}
######### main ##########
#db1
#echo $?
result=$(db1)
echo "函数返回值double后为$[result * 2]"
#函数的传参
#!/bin/bash
#函数的传参
db2() {
sum=$[$1 + $2]
echo $sum
}
####### main ########
read -p "请输入第一个参数:" num1
read -p "请输入第二个参数:" num2
SUM=$(db2 num1 num2)
echo "$num1 + $num2 的和为 $SUM"
#函数体里面的$1 $2代表的是调用函数时,函数名后面跟的第一个 第二个位置参数
#!/bin/bash
db3() {
#函数体里面的$1 $2代表的是调用函数时,函数名后面跟的第一个 第二个位置参数
sum=$[$1 - $2]
echo $sum
}
####### main ########
first=$1
second=$2
#主代码部分(即函数外的)$1 $2 代表的是执行脚本时,脚本后面跟的第一个 第二个位置参数
SUM=$(db3 $second $first)
echo "$1 - $2 的值为 $SUM"
#题目:使用函数 输出菱形,并实现可通过输入数值的大小来伸缩菱形的大小
#!/bin/bash
#题目:使用函数 输出菱形,并实现可通过输入数值的大小来伸缩菱形的大小
#菱形
lingxing() {
num=$1
for ((a=1; a<=num; a++))
do
for ((i=num; i>a; i--))
do
echo -n " "
done
c=$[(a*2)-1]
for ((b=1; b<=c; b++))
do
echo -n "*"
done
echo ""
done
for ((a=num-1; a>=1; a--))
do
#输出空格正三角
for ((b=num; b>a; b--))
do
echo -n " "
done
#输出倒等腰三角
c=$[(a*2)-1]
for ((i=1; i<=c; i++))
do
echo -n "*"
done
echo ""
done
}
######### main #########
read -p "请输入大小数值:" NUM
lingxing $NUM
#函数变量的作用范围
#!/bin/bash
#函数变量的作用范围
myfun() {
a=8
local a=10
echo $a
}
####### main ########
a=9
myfun
echo $a
#将一个点分十进制格式的IP地址转换成点分二进制格式
#!/bin/bash
#将一个点分十进制格式的IP地址转换成点分二进制格式
#定义将十进制转换成二进制功能的函数
switch() {
num=$1
result=''
for j in {1..8}
do
yushu=$[num % 2]
num=$[num / 2]
result=$yushu$result
done
echo $result
}
######### main ############
read -p "请输入一个IPv4:" IP
n=0
#set -x
#外循环分割出IP的每段数值
for ((i=1; i<=4; i++))
do
NUM=$(echo $IP | awk -F. "{print \$$i}")
#内循环使用余数倒排法进行数值转换
res=$(switch $NUM)
let n++
#使用n变量作为计数器,当n=4即转换IP的第4段数值后不再使用echo -n
if [ $n -lt 4 ];then
echo -n ${res}.
else
echo $res
fi
done
ip地址
#!/bin/bash
fenge() {
IP=$1
num=${IP%%.*}
IP=${IP#*.}
echo $num
}
IP="192.168.80.30"
for i in {1..4}
do
fenge $IP
done
#递归求介绍
#!/bin/bash
#递归求介绍
fact() {
if [ $1 -eq 1 ];then
echo 1
else
tmp=$[$1 - 1]
result=$(fact $tmp)
echo $[$1 * $result]
fi
}
read -p "请输入求阶乘的数值:" num
res=$(fact $num)
echo "$num阶乘的值为$res"
#递归目录
#!/bin/bash
#递归目录
dgdir() {
for i in $(ls $1)
do
dir=$1
if [ -d $dir/$i ];then
echo -e "$2$i 为目录"
dgdir $dir/$i "\t$2"
else
echo -e "$2$i 为文件"
fi
done
}
######## main #########
read -p "请用绝对路径输入你要递归查看的目录名:" folder
dgdir $folder ""
#通过函数递归输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#/bin/bash
#通过函数递归输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
dgdir() {
for a in $(ls $1)
do
if [ -d $1/$a ];then
echo -e "$2$1/$a 为子目录"
dgdir $1/$a "\t$2"
else
if [ ! -x $1/$a ];then
echo -e "$2$1/$a 为不可执行文件"
fi
fi
done
}
############# main ###############
IFS_OLD=$IFS
IFS=$IFS':'
for folder in $PATH
do
echo "$folder 为父目录"
dgdir $folder "\t"
done
加减乘除余阶乘
#!/bin/bash
source /opt/day13/myfun.sh
value1=$1
value2=$2
result1=$(jiafa $value1 $value2)
result2=$(jianfa $value1 $value2)
result3=$(chengfa $value1 $value2)
result4=$(qiuyu $value1 $value2)
result5=$(fact $value1 $value2)
echo "加法的结果为 $result1"
echo "减法的结果为 $result2"
echo "乘法的结果为 $result3"
echo "求余的结果为 $result4"
echo "阶乘的结果为 $result5"
#判断数组是否完整
#!/bin/bash
#判断数组是否完整
array1=(10 20 30 40 50 60)
array3=([0]="a" [1]="b" [2]="c" [3]="d" [5]="f")
length1=${#array1[@]}
length3=${#array3[@]}
last1=$[length1 - 1]
last3=$[length3 - 1]
arr1_last=${array1[$last1]}
arr3_last=${array3[$last3]}
ARR1_LAST=$(echo ${array1[@]} | awk '{print $NF}')
ARR3_LAST=$(echo ${array3[@]} | awk '{print $NF}')
if [ "$arr1_last" == "$ARR1_LAST" ];then
echo "array1 为完整的数组"
else
echo "array1 数组不完整"
fi
if [ "$arr3_last" == "$ARR3_LAST" ];then
echo "array3 为完整的数组"
else
echo "array3 数组不完整"
fi
#根据下标判断数组是否完整
#!/bin/bash
#根据下标判断数组是否完整
test1() {
#将传入的列表重新组成数组
arr=($@)
#获取数组长度
length=${#arr[@]}
#获取长度n - 1 的下标
xiabiao=$[length - 1]
echo $xiabiao
}
array=(10 20 30 40 50 60)
result=$(test1 ${array[@]})
#获取当前数组最后一个元素下标
xiabiao_now=$(echo ${!array[@]} | awk '{print $NF}')
#判断以上两个下标是否相同
if [ $result -eq $xiabiao_now ];then
echo "数组完整"
else
echo "数组不完整"
fi
array1=(10 20 30 40 50 60)
array3=([0]="a" [1]="b" [2]="c" [3]="d" [5]="f")
#冒泡排序算法
#!/bin/bash
#冒泡排序算法
maopao() {
arr=($@)
#获取数组长度
length=${#arr[@]}
#外循环确定比较轮数,比较轮数为数组长度减1,从1开始
for ((a=1; a<length; a++))
do
#内循环来比较相邻两个元素,从小到大排序:较大的往后放,每轮的比较次数随着轮数增加而减少
for ((b=0; b<length-a; b++)) #以左边元素的下标为参照
do
#获取左边比较元素的值
left=${arr[$b]}
#获取右边比较元素的值
c=$[b + 1]
right=${arr[$c]}
#比较相邻两个元素,如果左边的元素值大于右边的,则元素互换
if [ $left -gt $right ];then
tmp=$left
#将原来右边元素的值定义到左边元素
arr[$b]=$right
#将原来左边元素的值定义到右边元素
arr[$c]=$tmp
fi
done
done
echo "排序后数组顺序为 ${arr[@]}"
}
read -p "请输入一个数组列表:" num
array=($num)
echo "原始数组的顺序为 ${array[@]}"
maopao ${array[@]}
#直接选择排序
#!/bin/bash
#直接选择排序
choose() {
arr=($@)
length=${#arr[@]}
#外循环 确定排序轮数,轮数为数组长度减1
for ((a=1; a<length; a++))
do
#定义初始最大元素的下标为0
max=0
#内循环 确定当前比较轮数中最大的元素下标
for ((b=1; b<=length-a; b++)) #设置作为与初始最大元素比较的元素下标范围
do
#通过比较获取最大元素的下标
if [ ${arr[$b]} -gt ${arr[$max]} ];then
max=$b
fi
done
#用当前轮数最大的元素与当前轮数最后一个元素交换位置
last=$[length - a]
tmp=${arr[$last]}
arr[$last]=${arr[$max]}
arr[$max]=$tmp
done
echo "排序后的数组顺序为 ${arr[@]}"
}
read -p "请输入一个数组列表:" num
array=($num)
echo "原始数组的顺序为 ${array[@]}"
choose ${array[@]}
#反转排序
#!/bin/bash
#反转排序
filp() {
array=($@)
length=${#array[@]}
for ((a=0; a<length/2; a++))
do
tmp=${array[$a]}
#获取每轮的最后一个元素的下标
last=$[length-1-a]
array[$a]=${array[$last]}
array[$last]=$tmp
done
echo "反转排序后的数组顺序为 ${array[@]}"
}
read -p "输入一个数组的列表:" num
arr=($num)
echo "原始数组的顺序为 ${arr[@]}"
filp ${arr[@]}
分析攻击者,并封禁
日志分割脚本