shell练习

目录

1、编写函数,实现打印绿色OK和红色FAILED,判断是否有参数,存在为Ok,不存在为FAILED

 2、编写函数,实现判断是否无位置参数,如无参数,提示错误

3、编写函数实现两个数字做为参数,返回最大值

4、编写函数,实现两个整数位参数,计算加减乘除。

5、将/etc/shadow文件的每一行作为元数赋值给数组

6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量

7、使用关联数组按扩展名统计指定目录中文件的数量


1、编写函数,实现打印绿色OK和红色FAILED,判断是否有参数,存在为Ok,不存在为FAILED

代码:

#!/bin/bash
if [ $# -ne 0 ]
then
  echo "错误"
  exit
fi
function a()
{
  if [ $# -ne 0 ]
  then
    echo -e "\e[1;32m OK \e[0m"
  else
  echo -e "\e[1;31m FAILED \e[0m"
  fi
}

a 1
a

运行结果:

shell练习_第1张图片


 2、编写函数,实现判断是否无位置参数,如无参数,提示错误

 代码:

#!/bin/bash
panduan()
{
  if [ $# -eq 0 ]
  then
    echo "错误"
    exit
  else
    echo $@
  fi
}
panduan $@

运行结果:

shell练习_第2张图片


3、编写函数实现两个数字做为参数,返回最大值

代码:

#!/bin/bash
if [ $# -ne 0 ]
then
  echo "错误"
  exit
fi
is_number()
{
  n=`echo $1 | sed 's/[0-9]//g'`
  if [ -n "$n" ]
  then
    echo "请输入纯数字"
    exit
  fi

}
max(){
  if [ $? -eq 0 ] && [ $1 -ge $2 ]
  then
    echo $1
  else
    echo $2
  fi
}
  read -p "Please input two numbers:" a b
  is_number $a
  is_number $b
  max $a $b

运行结果:

shell练习_第3张图片



4、编写函数,实现两个整数位参数,计算加减乘除。

代码:

#!/bin/bash
if [ $# -ne 0 ]
then
  echo "错误"
  exit
fi
is_number()
{
  n=`echo $1 | sed 's/[0-9]//g'`
  if [ -n "$n" ]
  then
    echo "请输入纯数字"
    exit
  fi

}
jisuan(){
  echo "$1+$2=$[$1+$2]"
  echo "$1-$2=$[$1-$2]"
  echo "$1*$2=$[$1*$2]"
  echo "$1/$2=$[$1/$2]"
}
  read -p "Please input two numbers:" a b
  is_number $a
  is_number $b
  jisuan $a $b


运行结果:

shell练习_第4张图片


5、将/etc/shadow文件的每一行作为元数赋值给数组

代码:
 

#!/bin/bash
if [ $# -ne 0 ]
then
  echo "usage:bash $0 "
  exit
fi
for i in `cat /etc/shadow`
do
        a+=($i)
done
echo ${a[0]}

运行结果:


 


6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量

代码:

#!/bin/bash
declare -A a
while read line
do
  type=`echo $line | awk -F ":" ' {print $7} '`
  let a[$type]++
done < /etc/passwd
for i in ${!a[*]}
do
  echo "$i: ${a[$i]}"
done

运行结果:

shell练习_第5张图片



7、使用关联数组按扩展名统计指定目录中文件的数量

代码:

#!/bin/bash
if [ $# -ne 1 ]
then
  echo "usage:bash $0 xx (xx是目录)"
  exit
fi
declare -A a
find $1 -type f | awk -F '.' '{print $3}'  > /tmp/files
while read line
do
  let a[$line]++
done < /tmp/files
for i in ${!a[*]}
do
  echo "$i: ${a[$i]}"
done

运行结果:

shell练习_第6张图片

你可能感兴趣的:(shell,linux,服务器,windows)