1. 理解shell的作用及分类

  2. 设置和使用shell变量

  3. 编写简单的shell脚本

  4. 熟悉条件测试的应用

  5. 使用if条件语句

  6. 使用for.while循环语句

  7. 使用case分支语句

  8. 了解其它控制语句及函数




cat /etc/shells

cat /etc/passwd 

/bin/sh


定义新的变量

变量名要以英文字母或下划线开头,区分大小写

格式:变量名=变量值

查看变量的值

格式:echo $变量名


DAY=Monday

echo $DAY

Monday


从键盘输入内容为变量赋值

格式:read 【-p "信息”】 变量名

双引号“” 允许通过$符号引用其他变量值

单引号 ''   禁止引用其他变量值,$视为变通字符

反撇号 ``  将命令执行的结果输出给变量


设置变量的作用范围

格式: export 变量名...

       export 变名=变量值【变量名n=变量值】


清除用户定义的变量

格式: unset 变量名


SRV=srv.xapc.com.cn

echo $SVR

export SRV

环境变量配置文件

全局配置文件 /etc/profile

用户配置文件 ~/.bash_profile

查看环境变量  set


常见的环境变量:

$USER $LOGNAME

$UID $SHELL $HOME

$PWD $PATH

$PS1 PS2


echo $PATH

PATH="/opt/bin:$PATH"

echo $PATH


位置变量

表示为$n,n为1-9之间的数字。

./test1 one two


预定义变量表示形式如下

$#:命令行中位置参数的个数

$*:所有位置参数的内容

$?:上一条命令执行后返回的状态,当返回状态值时表示执行正常,非0值表示执行异常或出错。

$$:当前所在进程的进程号

$!:后台运行的最后一个进程号

$0:当前执行的进程/程序名


编写可执行shell脚本

运行环境设置:#!/bin/bash

注释信息

命令


运行shell脚本三种方式

直接执行具有X权限

例如:./boot.sh

使用指定的解释器程序执行脚本内容

例如:bash boot.sh  、sh boot.sh

通过source命令(或.)读取脚本内容执行

例如:source boot.sh 或.boot.sh


条件测试

格式1:test 条件表达式

格式2:【条件表达式】常

[操作符 文件或目录】

-d:是否目录

-e:是否存在

-f:是否为文件

-r:当前用户是否有读权限

-w:当前用户是否有写权限

-x:当前用户是否有执行权限

-L:是否是Link文件


整数比较

格式【整数1 操作符 整数2】

-eq:= equal

-ne:bu = not equal

-gt:> Greater than

-lt:< lesser than

-le:<= lesser or equal

-ge:>= greater or equal


字符串比较

格式【字符串1 = 字符串2】相同 

    【字符串1 != 字符串2】不同

    【-z 字符串】为空

【LANG !=“en.US"] && echo $LANG 

zh_CN.UTF-8


逻辑测试

格式:【表达式1】操作符【表达式2】。。

常用的测试操作符

-a或&&:逻辑与,“而且”的意思

前后两个表达式都成立时


-o或||:逻辑或,‘或者’

前后两个表达式只要一个成立


!:逻辑否

当指定的条件不成立时,返回结果为真


分支判断

if then eles fi

if 条件测试命令1;then 

   命令序列1

elif 条件测试命令2;then

     命令序列2

elif

else

    命令序列n

fi



#!/bin/bash

for TM in "M" "N" "E"

do

    echo "Then $TM of the day."

done


#!/bin/bash

DIR="/opt"

LMT=100

ValidUsers=`grep "/bin/bash" /etc/passwd|cut -d ":" -f 1`

for Username in $ValidUsers

do 

    Num=`find $DIR -user $UserName|wc -l`

    if[$Num -gt $LMT];then

        echo "$UserName have $Num files."

    fi

done


批量添加20个帐号

#!/bin/bash

i=1

while[ $i -le 20 ]

do

    useradd user$i

    echo "123456" |passwd --stdin user$i &> /dev/null

    i=`expr$i+1`

done


批量删除20个帐号

#!/bin/bash

i=1

while[ $i -le 20 ]

do 

    userdel -r user$i

    i=`expr $i + 1`

done


case 根据变量的不同取值,分别执行不同的命令操作

case 变量值 in

#!/bin/bash

case $1 in

    start)

        echo "Start MYSQL service"

        ;;

    stop)

        echo "Stop MYSQL service"

        ;;

     *)

        echo "Usage: $0 start|stop"

        ;;

esac


until执行重复操作


shift用于迁移位置变量,将$1~$9座次向左传递

例如,若当前脚本程序获得的位置变量如下:

#!/bin/bash

Result=0

while [ $# -gt 0 ]

do 

    Result=`expr $Result + $1`

    shift

done

echo "The sum is : $Result"


break

continue


函数应用

#!/bin/bash

adder(){


    echo `expr $1 + $2`

}

adder 12 23

adder 223 1