*8 脚本小练习

简介:

编写脚本解决问题:

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

相关文章
|
6月前
|
JavaScript 前端开发 Go
脚本
脚本
102 3
|
Shell
脚本解释器脚本
脚本解释器脚本
50 1
|
Shell Perl
杀死所有脚本
杀死所有脚本
51 1
|
XML JSON jenkins
OCLint静态代码检查脚本
OCLint是静态代码检查工具,用于检查代码质量
459 0
|
文字识别 搜索推荐 机器人
【分享 10 个日常使用的脚本】
【分享 10 个日常使用的脚本】
143 0