博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
*8 脚本小练习
阅读量:6996 次
发布时间:2019-06-27

本文共 4127 字,大约阅读时间需要 13 分钟。

编写脚本解决问题:

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

转载地址:http://vsdvl.baihongyu.com/

你可能感兴趣的文章
SSH 常用命令
查看>>
模型思维_第1-4课_学习笔记
查看>>
linkin大话面向对象--方法详解
查看>>
Linkin大话Java和internet概念
查看>>
Linux指令--cp
查看>>
.Net多线程
查看>>
【物联网智能网关-01】通过AD采集获取温湿度
查看>>
网络和网络互联
查看>>
Python任意字符集转换
查看>>
RHEL6基础二十四之RHEL软件包管理③源码安装
查看>>
Appium自动化测试之微信元素识别和代码实战
查看>>
基于Nginx反向代理及负载均衡
查看>>
SAP ALL compile code: SGEN
查看>>
Oracle体系结构之检查点
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(15)
查看>>
以太坊的势与局
查看>>
如何结合使用 Subversion 和 Eclipse
查看>>
ELK 实验(五)配置数据源和仪表盘
查看>>
centos 6.3搭建个人私有云存储owncloud
查看>>
PHP中的浅拷贝和深拷贝
查看>>