linux学习笔记(十)

    xiaoxiao2021-03-25  101

    bash脚本类似批处理,就是把许多的指令集合在一起,并提供循环,条件,判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。 ####引用和转义#### 引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。 ##弱引用## 将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。变量扩展或命令扩展在双引号内仍起作用 ##强引用## 将字符串放置在单引号中,保留字符串中所有字符的文字之,同时禁用所有扩展 ##转义## 非引用的\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而非PATH变量的内容。) [root@dns-server ~]# echo #hello world# [root@dns-server ~]# echo \# hello world # # hello world [root@dns-server ~]# echo \# hello world \# # hello world # [root@dns-server ~]# echo '# hello world #' # hello world # [root@dns-server ~]# echo "# hello world #" # hello world # [root@dns-server ~]# echo "$HOME" /root [root@dns-server ~]# echo '$HOME' $HOME

    算术运算符指的是可以在程序中实现加,减,乘,除等数学运算的运算符。 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

    转载请注明原文地址: https://ju.6miu.com/read-22385.html

    最新回复(0)