算术运算符指的是可以在程序中实现加,减,乘,除等数学运算的运算符。 operator meaning <VARIABLE>++ 增量后 <VARIABLE>-- 减量后 - 减法 + 加法 ** 幂运算 * 乘法 / 除法 % 余数 += 加等 -= 加等 循环:for循环用于值列表中的相同命令的重复 if语句:if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之间的命令列表(fi代表if块的结束) ##将所有mail组的文件复制到/mnt/mail.当前时间的目录中## #!/bin/bash TIME=$(date +%H:%M:%S)
find / -group mail -exec cp -rp {} /mnt/mail.${TIME} \;
##连接30台主机,能连接的输出up,不能连接的输出down## #!/bin/bash for NUM in 172.25.254.{1..30} do ping -c1 -w1 $NUM &> /dev/null && echo $NUM up || echo $NUM down
done
##将passfile中的密码赋予username中的用户## #!/bin/bash MAXLINE=`wc -l /mnt/username |cut -d " " -f 1` for NUM in $( seq 1 $MAXLINE ) do USERNAME=`sed -n ${NUM}p /mnt/username` PASSWD=`sed -n ${NUM}p /mnt/passfile` useradd $USERNAME echo $PASSWD | passwd --stdin $USERNAME
done
##先输出十以内的偶数,再输出十以内的奇数## #!/bin/bash for i in {1..10} do ANSWER=$[ $i % 2 ] while [ "$ANSWER" = "0" ] do echo $i break done done echo ================================ for i in {1..10} do ANSWER=$[ $i % 2 ] while [ "$ANSWER" = "1" ] do echo $i break done
done
##username中用户lee后加brother## 一: !/bin/bash MAXLINE=`wc -l /mnt/username |cut -d " " -f 1` for NUM in $( seq 1 $MAXLINE ) do NAME=`sed -n ${NUM}p /mnt/username` while [ "$NAME" = "lee" ] do echo $NAME brother break done while [ "$NAME" != "lee" ] do echo $NAME break done
done
二: #!/bin/bash MAXLINE=`wc -l /mnt/username |cut -d " " -f 1` for NUM in $( seq 1 $MAXLINE ) do NAME=`sed -n ${NUM}p /mnt/username` [ "$NAME" = "lee" ] && echo $NAME brother || echo $NAME done ##十秒倒计时## #!/bin/bash for ((i=10;i>=1;i--)) do echo -n After ${i}s is end echo -ne ' \r' sleep 1
done
##一分十秒倒计时## #!/bin/bash MIN=$1 for ((SEC=$2;SEC>=0;SEC--)) do echo -n "After $MIN:$SEC is end " echo -ne "\r \r" sleep 1 while [ "$SEC" = "0" -a "$MIN" -gt "0" ] do echo -n "After $MIN:$SEC is end " echo -ne "\r \r" SEC=60 ((MIN--)) done done
##连接ip## #!/bin/bash if [ -z "$*" ] ##检测命令后是否给予字符串 then echo ERROR:you not give me a ipaddress ##如果没有,报错 else ping -c1 -w1 $* &> /dev/null if [ "$?" = "0" ] then echo $* is up ##能够ping通,显示up else echo $* is down ##不能ping通,显示down fi
fi
##判断数字是否是10以内的正数## #!/bin/bash if [ $1 -gt 0 -a $1 -le 10 ] then echo yes else
echo no
fi
-gt ##大于 -ge ##大于等于 -lt ##小于 -le ##小于等于 -ne ##不等于 -eq ##等于 -ef ##看两文件的节点是否一致 -nt ##看前一个文件是否比后一个文件新 -ot ##看前一个文件是否比后一个文件老 ##elif的运用## 输入linux则输出westos,输入westos则输出linux #!/bin/bash if [ "$*" = "linux" ] then echo westos elif [ "$*" = "westos" ] then echo linux else echo ERROR
fi
case语句:它能够把变量的内容与多个模版进行匹配,再根据成功匹配的模版去决定应该执行哪部分代码 ##case的运用## case $1 in westos) echo linux ;; linux) echo westos ;; *) echo error esac
##
expect自动应答##
vim ask.sh ################################################## #!/bin/bash read -p "what is your name:" NAME read -p "how old are you: " AGE read -p "what is your class:" CLASS read -p "are you happy : " FEEL echo $NAME is $AGE\'s old $NAME is $CLASS student and $FEEL ################################################# chmod +x ask.sh vim answer.exp ######################## #!/usr/bin/expect spawn /mnt/ask.sh expect "name" send "haha\r" expect "old" send "22\r" expect "class" send "yunwei\r" expect "happy" send "unhappy\r" expect eof ##########################chmod +x anser.exp
##退出状态## linux命令完成时,将返回推出状态。成功完成程序,将返回0的推出状态。非零退出状态通常表示发生了错误。 example: grep的退出状态的含义: 0 在指定的文件中找到了模式 1 在指定的文件中未找到模式 >1 一些其他错误(无法打开文件、错误的搜索表达式等) ##设置环境变量## vim test.sh #!/bin/bash echo $a vim .bash_profile PATH=$PATH:$HOME/bin:/mnt export PATH export a=1 source .bash_profile vim /etc/profile 77 export PATH=$PATH:/mnt 78 export a=2 source /etc/profile ##使环境变量生效 ##判断后缀为文件,目录或设备## #!/bin/bash IFCMD () { if [ $1 $2 ] then echo $2 is $3 fi } IFCMD -f $1 file IFCMD -d $1 direcotry
IFCMD -b $1 block
