编写脚本解决问题:
1.传递一个字符串给脚本,脚本会将该字符串当作用户名,如果该用户不存在,则添加之并为其设置与用户名相同的密码
#!/bin/bash
#
if id $1 &> /dev/null ; then
#判断用户是否存在
echo "用户$1已存在。"
else
useradd $1
echo $1 | passwd --stdin $1 &> /dev/null
echo "用户$1已创建。"
#如果不存在创建用户并设置与用户名相同的密码
fi
2.将两个文本文件的路径传递给脚本作为其参数,如果有文件不存在,则结束脚本执行并报告错误信息;如果文件都存在,则比较两个文件中哪个文件的行数多,返回行数多的文件的文件名。
#!bin/bash
#
if [ -a $1 ]&&[ -a $2 ];then
a=$(wc -l $1)
b=$(wc -l $2)
if [ $a -gt $b ] &> /dev/null;then
echo "$1"
else
echo "$2"
fi
else
echo "有路径不存在,参数错误"
fi
3.给脚本传递一个路径作为参数,如果该文件存在,判断其文件类型。
#!bin/bash
#
if [ -b $1 ];then
echo "该路径为块设备"
elif
#多分支结构判断,如果第一判定条件不为真,就依次往下判断,如果全为假,就证明该路径不存在
[ -c $1 ];then
echo "该路径为字符设备"
elif
[ -d $1 ];then
echo "该路径为目录"
elif
[ -f $1 ];then
echo "该路径为普通文件"
elif
[ -h $1 ];then
echo "该路径为符号链接文件"
elif
[ -p $1 ];then
echo "该路径为管道文件"
elif
[ -S $1 ];then
echo "该路径为套接字文件"
else
echo "该路径不存在"
fi
4.给脚本传递三个整数,要求:
1) 如果用户传递过来的不是三个参数,报告正确用法;
2) 如果三个参数中有非纯数字字符串,报告错误并提示用户输入数字;
3) 从三个整数中的选出最大数和最小数,并显示出来;
#!bin/bash
#
echo -n "请输入三个整数字符:"
read -t 8 a b c
if [[ $a =~ ^[0-9]+$ && $b =~ ^[0-9]+$ && $c =~ ^[0-9]+$ ]];then
echo
else
echo "请输入三个整数字符:"
exit 5
fi
if [ $a -gt $b ];then
t=$a;a=$b;b=$t;
fi
if [ $a -gt $c ];then
t=$a;a=$c;c=$t;
fi
if [ $b -gt $c ];then
t=$b;b=$c;c=$t;
fi
echo "最小数为$a 最大数为$c"
5.传递三个参数给脚本,第一个为整数,第二个为算术运算符(包括基本的加、减、乘、除、取模运算符即可),第三个为整数,将计算结果显示出来;要求:
1) 判断第一个和第三个参数是否为整数;
2) 判断第二个算术运算符必须是给定的运算符中的一个,否则报错;
3) 如果是除法,在不能整除的情况下,保留两位精度。
#!/bin/bash
#
if [[ $1 =~ ^[0-9]+$ && $2 =~ ^[+,-,*,/,%]+$ && $3 =~ ^[0-9]+$ ]];then
if [ $2 == / ] && [ $3 -eq 0 ] ;then
echo "在做除法运算时,第三位参数不得为0,否则无法进行运算"
exit 5
fi
num=$(echo "$1$2$3"| bc)
if [ $[num%1] -eq 1 ];then
echo "$num"
exit 5
else
echo "scale=2;$1$2$3" | bc
fi
else
echo "请检查第一与第三位参数是否为整数,第二位运算符是否为"+,-,*,/,%""
fi
6.求100以内所有偶数之和以及奇数之和。
#!bin/bash
#
odd=0
even=0
for i in $(seq 100 ); do
if [ $[$i%2] -eq 0 ];then
even=$[$even+$i]
else
odd=$[$odd+$i]
fi
done
echo "偶数为$even"
echo "奇数为$odd"
7.给脚本传递一个整数作为参数,显示出所有比该数字小的且能被3整除的整数。
#!bin/bash
#
read -t 8 -p"请输入一个数字:" num
if [ -z $num ] ; then
echo "操作超时"
fi
for i in $(seq $num);do
if [ $[$i%3] -eq 0 ];then
echo "$i"
fi
done
8.利用random变量随机生成十个数字,显示出这十个数字,并显示出其中的最大值和最小值。
#!/bin/bash
#
declare -i max=0
declare -i min=0
#声明最大数组和最小数数组的整型变量,也就是说要取整数
for i in {1..10} ; do
#执行次数
myrand=$RANDOM
[ $i -eq 1 ] && min=$RANDOM
#对比变量i等于1则声明为最小数值
if [ $i -le 9 ];then
echo "$myrand,"
else
echo "$myrand"
fi
#完成10个随机数的筛选
[ $myrand -gt $max ] && max=$myrand
#对比筛选最大数
[ $myrand -lt $min ] && min=$myrand
#对比筛选最小数
done
echo -e "最大数与最小数分别为:\n$max,$min"
9.给脚本传递一个数字作为行总数,分别打印由*组成的最小锐角朝上和朝下的等腰三角形以及菱形。
#!bin/bash
#
read -t 8 -p "请输入行总行数: " line
#利用read命令使用户输出数值赋予变量line
for i in $(seq $line) ; do
#赋予变量i为用户输入的总行数的展开(正序排序)
for j in $(seq $[i-1]) ; do
#赋予变量j为每行的空格数
echo -n " "
done
for k in $(seq $[2*(line-i)+1]) ; do
#赋予变量k每行的星星数
echo -n "*"
done
echo
done
#
#bin/bash
#
read -t 8 -p "请输入行总行数: " line
for i in $(seq $line -1 1) ; do
#赋予变量i为用户输入的总行数的展开(倒序排序)
for j in $(seq $[i-1]) ; do
echo -n " "
done
for k in $(seq $[2*(line-i)+1]) ; do
echo -n "*"
done
echo
done
#
#bin/bash
#
read -t 8 -p "请输入行总行数: " line
for i in $(seq $line -1 1) ; do
#赋予变量i为用户输入的总行数的展开(倒序排序)
for j in $(seq $[i-1]) ; do
echo -n " "
done
for k in $(seq $[2*(line-i)+1]) ; do
echo -n "*"
done
echo
done
for i in $(seq $line) ; do
#赋予变量i为用户输入的总行数的展开(正序排序)
for j in $(seq $[i-1]) ; do
#赋予变量j为每行的空格数
echo -n " "
done
for k in $(seq $[2*(line-i)+1]) ; do
#赋予变量k每行的星星数
echo -n "*"
done
echo
done
10.分别打印顺序和逆序的九九乘法表。
#!bin/bash
#
echo "这是一个正序的九九乘法表"
for i in {1..9} ; do
#变量i赋予1-9
for j in $(seq $i) ; do
#变量j是赋予变量i的数值列表
echo -ne "$i*$j=$[i*j]\t"
#输出结果
done
echo
done
#
echo "这是一个倒叙的九九乘法表"
for i in {9..1} ; do
for j in $(seq $i) ; do
echo -ne "$i*$j=$[i*j]\t"
done
echo
done
11.打印国际象棋棋盘,8×8的方格布局,其颜色分布为:
灰黑灰黑灰黑灰黑
黑灰黑灰黑灰黑灰
灰黑灰黑灰黑灰黑
黑灰黑灰黑灰黑灰
灰黑灰黑灰黑灰黑
黑灰黑灰黑灰黑灰
灰黑灰黑灰黑灰黑
黑灰黑灰黑灰黑灰
#!bin/bash
#
black=$(echo -e "\033[40m \033[0m")
gray=$(echo -e "\033[47m \033[0m")
line1=$(echo "$gray$black$gray$black$gray$black$gray$black")
line2=$(echo "$black$gray$black$gray$black$gray$black$gray")
line3=$(echo -e "$line1 \n$line2")
echo -e "$line3 \n$line3 \n$line3 \n$line3"
本文转自谁等了谁 51CTO博客,原文链接:http://blog.51cto.com/12486569/1920364