知识点:*字符串比较*


1. == 测试是否相等,相等为真,不等为假

例:A=hello

   B=hi

   [ "$A" == "$B" ]   #可以没有双引号

   ECHO $?


2.!=测试是否不等,不等为真,相等为假

-n string: 测试制定字符串是否为空,空为真,不空为假

-z string: 测试制定字符串是否不空,不空为真,空为假

   >     >=

 <     <=



练习1:

传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结


果显示出来。

#!/bin/bash

#

if [ -n $1 ]; then

  echo "usage ni dei shu ru dong xi a "

  exit 3

fi

if ! id $1 &> /dev/null; then

   echo "$1 is not exist"

   exit 2

fi

if [ `id -n -u $1` == `id -n -g $1` ]; then

   echo "yiyang"

else

   echo "buyiyang"

fi



练习2:

传递一个参数给脚本,如参数为q或者quit就退出脚本;否则就显示用户的参数;


#!/bin/bash

#

if [ $1 == 'q ' ] || [ $1 == 'quit' ];then

  echo "已退出"

  exit 11

fi

echo $1


知识点:保留小数点后面的两位 bc

例:scale=2 ###保留两位小数点

   求111/22等于多少

echo “scale=2;111/22;” | bc


或者 bc <<< "scale=2;111/22;"



for循环模式:

   for 变量 in 列表;do

      循环体

   done


例: for I in {1..100};do


seq 10      1,2,3,4,5,6,7,8,9,10 即1到10 所有的正整数

seq 5 10    5,6,7,8,9,10

seq 2 2 10  2,4,6,8,10 

seq 1 2 10  1,3,5,7,9

相当于[1..10]


 declare -i sum=0 声明×××

        -x 声明成环境变量

练习:给系统中每个用户问声好,并显示对方的shell 提示如下

LINES =`wc -l /etc/passwd | cut -d' ' -f1` for I in seq 1 $LINES; do echo "hello, `head -n &I /etc/passwd | tail -1 | cut -d: -f1`"; done 

练习:只向默认shell为bash的用户问声好




写一个脚本,利用random生成10个随机数,并找出其中最大值,和最小值


 #!/bin/bash

  2 #

  3 declare -i max=0

  4 declare -i min=0

  5 for I in {1..10}; do

  6    myrand=$RANDOM

  7    [ $I -eq 1 ] && min=$myrand

  8    if [ $myrand -lt 9 ]; then

  9        echo -n "$myrand,"

 10    else

 11        echo "$myrand"

 12    fi

 13    [ $myrand -gt $max ] && max=$myrand

 14    [ $myrand -lt $min ] && min=$myrand

 15 done

 16 echo "$min"

 17 echo "$max"