-
用for实现判断/var目录下所有文件的类型
#!/bin/bash # for i in $(find /var); do if [ -b $i ];then echo "$i is block device" elif [ -c $i ]; then echo "$i is character device" elif [ -f $i ]; then echo "$i is normal file" elif [ -h $i ]; then echo "$i is symbol link file" elif [ -p $i ]; then echo "$i is pipe file" elif [ -S $i ]; then echo "$i is socket file" elif [ -d $i ]; then echo "$i is directory file" else echo "file or directory not exist" fi done exit 0
2.添加10个用户user1-user10,密码为8为随机密码
tr -cd [[:alnum:]]!#@] < /dev/urandom表示从随机数中取出包含[[:alnum:]]!#@]这些字符的内容 tr -cd [[:alnum:]]!#@] < /dev/urandom |head -c 8表示从上面取出的内容中取头8个字符 #!/bin/bash for n in $(seq 1 10);do name=user$n useradd "$name" echo "$(tr -cd [[:alnum:]]!_#@] < /dev/urandom |head -c 8)" |passwd --stdin $name &> /dev/null echo "User create" done exit 0
3.编写脚本,提示请输入网络地址,如:192.168.0.0,判断输入的网段中主机在线状态(执行ctrl+c,kill 进程号,方可退出)
#!/bin/bash
trap 'echo "quit...";kill -9 $(pgrep -f $0)' INT
read -p "please input the IP ,such as 192.168.0.0" IP
net=$(echo $IP |cut -d "." -f1-2)
for i in {0..254};do
for j in {0..254};do
netip="$net.$i.$j"
ping -c1 -w1 $netip &>/dev/null && echo "$netip is up" || echo "$netip is down"
done
done
4.打印九九乘法表(\t表示横向跳到下一个制表符位置,echo表示换行,-e表示启用反斜杠转义的解释,-n表示不输出尾随新行)
#!/bin/bash
## 9x9
for i in {1..9} ; do
for j in $(seq $i) ; do
#echo "j"=$j
echo -en "${i}*${j}=$[$i*$j]\t"
done
echo
done
5.在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如1abcd1234.html
#!/bin/bash
for I in {1..10};do
filename=$( echo "$I$(tr -cd [:alpha:]</dev/urandom |head -c 8).html")
#这种写法也可以 filename=$(echo "$I$(cat /dev/urandom |tr -cd [:alpha:] |head -c 8).html")
touch /testdir/$filename
echo "$filename is created"
done
6.猴子吃桃,第一天摘下若干桃子,吃了一半,接着又吃一个,第二天接着吃了一半,接着又吃了一个,这样一直到第十天,只有一个桃子,第一天一共摘了多少?
#解释:猴子一共吃了9天桃子,反推第九天桃子数量(第十天桃子为1+1)2,第八天桃子数量(第九天桃子+1)2,第一天桃子数量(第二天桃子+1)2,按照这个规律进行了9次。
[root@hadoop001 shell]# cat taozi.sh
#!/bin/bash
sum=1
for I in {1..9};do
let sum=(sum+1)*2
done
echo "第一天一共摘了桃子数为:$sum"
7.编写函数实现两个数字作为参数,返回最大值
#!/bin/bash
max(){
if [ $# -ne 2 ];then
echo "please input two digits"
exit 1
else
if [[ $1 =~ ^[0-9]+$ ]] && [[ $2 =~ ^[0-9]+$ ]];then
if [ $1 -lt $2 ];then
echo "the max is $2"
else
echo "tht max is $1"
fi
else
echo "please enter legal number"
exit 2
fi
fi
}
max $1 $2
8.用文件名作为参数,统计所有文件的总行数(要理解shift作用)
#!/bin/bash
sum=0
while(( $# > 0 ));do
num=$(cat $1|wc -l)
sum=$[$sum+$num]
shift
done
echo "总行数为:" $sum
9.每隔3秒钟到系统上获取已经登录的⽤户的信息;如果发现⽤户
hadoop登录, 则将登录时间和主机记录于⽇志/var/log/login.log中,并
退出脚本
#!/bin/bash
if [ ! -e /var/log/login.log ];then
touch /var/log/login.log
echo "create /var/login.log file"
fi
until false ;do
if who |grep "hadoop" &>/dev/null ;then
##这里要注意,if是没有[],一旦有了会报错,所以需要仔细理解if的
who |grep "hadoop" >> /var/log/login.log
break
fi
sleep 3
done
10.用户在1-39内输入n个数,系统将随机生成且不重复的n个数
#!/bin/bash
read -p "enter a element numbers[1-39]" ELENUM
declare -a ARRAY
function COMELE {
for J in `seq 0 $[${#ARRAY[*]}-1]`; do
if [ "$1" -eq ${ARRAY[$J]} ];then
return 1
fi
# echo "xxx"
done
return 0
}
for I in `seq 0 $[$ELENUM-1]`;do
while true ;do
NUM=$[$RANDOM%40]
COMELE $NUM
if [ $? -eq 0 ];then
break
fi
done
ARRAY[$I]=$NUM
echo "${ARRAY[$I]}"
done
11.写一个脚本,脚本可以接受选项(i,I,a),完成以下任务:
(1),使用以下形式:getinterface.sh [-i interface | -I IP |-a]
(2).当用户使用-i选项时,显示其指定网卡的IP地址
(3)当用户使用I选项时,显示其后面的ip地址所属的网络接口
(4)当用户单独使用-ax选项时,显示所有网络接口及其IP地址(lo除外)
#!/bin/bash
SHOWIP(){
if ! ifconfig |grep -o "^[^[:space:]]\{1,\}"|grep "$1" &>/dev/null;then
return 11
fi
echo -n "$1:"
ifconfig $1 |grep -o "inet [0-9\.]\{1,\}"|cut -d " " -f 2
}
SHOWETHER() {
if ! ifconfig |grep -o "inet [0-9\.]\{1,\}"|cut -d " " -f 2 |grep "$1" &>/dev/null;then
return 12
fi
echo -n "$1:"
ifconfig |grep -B 1 "$1" |grep -o "^[^[:space:]]\{1,\}" |cut -d: -f 1
}
USAGE() {
echo "getinterface.sh <-i interface|I IP>"
}
SHOWALL(){
for N in $(ifconfig |grep -o "^[^[:space:]]\{1,\}"|cut -d: -f 1);do
if [ $N != "lo" ];then
echo "$N:$(ifconfig $N |grep -o "inet [0-9.]\{1,\}"|cut -d" " -f2)"
fi
done
}
while getopts ":i:I:a" SWITH;do
case $SWITH in
i)
SHOWIP $OPTARG
[ $? -eq 11 ] && "wrong ehtercard"
;;
I)
SHOWETHER $OPTARG
[ $? -eq 12 ] && "wrong IP "
;;
a)
SHOWALL
;;
\?)
USAGE;;
esac
done
12.从给定的一个数据集合中,找到最大的一个数
#!/bin/bash
ARRAY=(11 33 567 98 24 984 345 216 189 401)
declare -i MAX=${ARRAY[0]}
index=$[${#ARRAY[*]}-1]
for i in `seq 1 $index`;do
if [ $MAX -lt ${ARRAY[$i]} ];then
MAX=${ARRAY[$i]}
fi
done
echo $MAX
13.从给定的一组数组中的数据,排序
#!/bin/bash
ARRAY=(11 33 567 98 24 984 345 216 189 401)
for i in `seq 0 $[${#ARRAY[*]}-1]`;do
for j in `seq $i $[${#ARRAY[*]}-1]`;do
if [ ${ARRAY[$i]} -lt ${ARRAY[$j]} ] ;then
sum=${ARRAY[$i]}
ARRAY[$i]=${ARRAY[$j]}
ARRAY[$j]=$sum
fi
done
echo -n "${ARRAY[$i]} "
done
echo