shell..3

if 语句
使用if语句编写一个核对文件类型的脚本

#!/bin/bash
if
        test -e $1
then
  test -f $1 &&{
     echo "这是一个文件"
}
  test -L $1 &&{
     echo "这是一个软链接"
}
  test -S $1 &&{
     echo "这是一个套接子"
}
  test -b $1 &&{
     echo "这是一个块设备"
}
  test -d $1 &&{
     echo "这是一个目录"
}
  test -c $1 &&{
     echo "这是一个字符设备"
}
else
        echo  "目标不存在"
fi

测试
这里写图片描述
编写一个用户建立的脚本
当文件数量不对时报错
文件不存在报错
行数差异报错
用户存在显示存在不改变密码
不存在建立用户并设定相应的密码

#!/bin/bash
if
        [ "$#" != "2" ]
then
        echo "please input the userfile and passwdfile !"
        exit 0
elif
        [ ! -e "$1" -o ! -e "$2" ]
then
        echo "the file doesn't exist !"
        exit 0
fi
 A=$(awk 'END{print NR}' $1)
 B=$(awk 'END{print NR}' $2)
if
        [ "$A" != "$B" ]
then
        echo "the lines of "$1" is not equal to the "$2""
else
        for LINE_NUM in `seq 1 $A`
        do
                USERNAME=`sed -n "${LINE_NUM}p" $1`
                PASSWORD=`sed -n "${LINE_NUM}p" $2`
                Check_User=`getent passwd $USERNAME`
                if
                        [ -n "$Check_User" ]
                then
                        echo "the user "$USERNAME" has existed !"
                else
                        useradd $USERNAME
                        echo $PASSWORD | passwd --stdin $USERNAME
      fi
        done
fi

这里写图片描述
编写一个小代码
当属于cat的时候输出dog
输入dog的时候输出cat
输入其他的时候报错

#!/bin/bash
if 
        [ "$1" = "dog" ]
then
        echo cat
elif
        [ "$1" = "cat" ]
then
        echo dog
elif
        [ "$1" != "dog" -a "$1" != "cat" ]
then
        echo ERROR!
fi

这里写图片描述
但是这个方法有问题 如果输入刚好是在最后做判断 呢么会大大增加运行的时间
所以用到了 case语句

#!/bin/bash
case $1 in
        dog)
        echo cat
        ;;
        cat)
        echo dog
        ;;
        *)
        echo error
esac
~          

使用脚本进行自动分区
这里用到了自动应答

 #!/bin/bash
desk_message=`fdisk -l | awk '/Extended/'`
if
[ -z "$desk_message" ]
then
        fdisk /dev/vdb <<EOF
        n
        e


        wq
EOF     
        partprobe
fi
~     

查看开着的主机 并将主机名写在文件内

这里写图片描述

这里写图片描述
自动应答 expect
首先下载expect

#!/bin/bash
set timeout 2
read -p "what is your name:" NAM
read -p "How old are you :" AGE
read -p "which is your major:" OBJ
read -p "Are you happy? " F
echo "$NAM is $AGE and study $OBJ feel $F"

其次
在调用expect回答所要回答的问题

#!/usr/bin/expect
set timeout 2
spawn /mnt/question_A.sh
expect {
        name { send "hua\r";exp_continue } #name问题内的关键字 \r表示回车
        old { send "20\r";exp_continue }
        major { send "linux\r";exp_continue }
        happy { send "happy\r" }
}
expect eof

这里写图片描述
这里写图片描述

关于计算的一些命令以及运行程序
Shell代码

1.     
2. #!/bin/bash    
3. ##示例1:10和12为两个参数分别对应$1和$2    
4. echo 10 12 |awk '{printf("%d\n", $1+$2)}'    
5.    
6. ##示例2:a和b作为两个变量传入    
7. a=10    
8. b=12    
9. echo |awk '{printf("%d\n", '$a'+'$b')}'    
10.    
11. ##示例3:COUNT_FAIL除以COUNT_INIT 保留4为小数,结果赋值给FAIL_INIT,[b]结果四舍五入[/b]。    
12. COUNT_FAIL=10    
13. COUNT_INIT=20 FAIL_INIT=`awk 'BEGIN{printf "%.4f\n",'$COUNT_FAIL'/'$COUNT_INIT'}'`    
14. echo $FAIL_INIT    

备注:示例2和示例3两种写法除数和被除数都要加“’”号(单引号),否则会报错“division by zero attempted”,另外“BEGIN”也很重要哦。

b.使用bc命令
Shell代码

1.     
2. #!/bin/bash    
3. ##示例1:输出 1+2 的运算结果    
4. echo 1+2 |bc    
5.    
6. ##示例2:COUNT_FAIL除以COUNT_INIT 保留2为小数,结果赋值给FAIL_INIT,[b]结果不四舍五入[/b]。    
7. FAIL_INIT=`echo "scale=2; $COUNT_FAIL/$COUNT_INIT" | bc`    

c.使用expr命令
Shell代码

1.     
2. #!/bin/bash    
3. count=10    
4. count=`expr $count + 12`    
5. echo $count    

d.使用let命令
Shell代码

1.     
2. #!/bin/bash    
3. ##示例1    
4. let num1=10*20    
5. echo $num1    
6.    
7. ##示例2    
8. let "num2=10*20"    
9. echo $num2    

e.加双括号
Shell代码

1.     
2. #!/bin/bash    
3. ##示例1:双小括号    
4. a=12    
5. b=20    
6. echo $((a*b))    
7. echo $(($a*$b))    
8.    
9. ##示例2:中括号    
10. c=10    
11 echo $[c*20]    
12echo $[$c*20]    

猜你喜欢

转载自blog.csdn.net/ff12123/article/details/80840099
今日推荐