shell编程

测试语句

格式一 test

格式二 [ <测试表达式> ]

格式三   [[ <测试表达式> ]]

字符串测试比较

注意事项:

1 字符串或字符串变量比较都要加双引号再比较;

2 字符串或字符串变量比较,比较符号两端都最好都有空格;

整数二元比较操作符

 

逻辑操作符

在[ ]中是使用的逻辑操作符 在[[  ]]中使用的逻辑操作符 说明
-a &&  
-o ||  
! !  

 

 

 

监控MySQL是否异常,如果异常则启动.

 

Web服务监控手段.

 

 

Shell变量输入

read -t 5 -p "pls input:" a

 

#!/bin/sh
read -p "pls input two num:" a b
[ -z "$a" ] || [ -z "$b" ] && {

  echo "pls input two num again"
  exit 1
}

expr $a + 0 &> /dev/null
RETVAL1=$?
expr $b + 0 &> /dev/null
RETVAL2=$?
#[ $RETVAL1 -ne 0 -o $RETVAL2 -ne 0 ] && {
#  echo "pls input two num again"
#  exit 2
#}
test $RETVAL1 -ne 0 -o $RETVAL2 -ne 0 && {
  echo "pls input two num again"
  exit 2
} 

[ $a -lt $b ] && {
  echo "$a < $b" 
  exit 0
} 

[ $a -eq $b ] && {
  echo "$a == $b"
  exit 0
} 

[ $a -gt $b ] && {
  echo "$a > $b"
  exit 0
}

 

 

变量的数值计算

expr

bc 是unix下的计算器,支持小数运算和整数运算

 

变量替换避免误操作

运算符号 替换
${value:-word} 如果变量名存在且非null,则返回变量的值。否则,返回word字符串。
用途:如果变量未定义,则返回默认值。
范例:${value:-word},如果value未定义,则表达式的值为word。
${value:=word} 如果变量名存在且非null,则返回变量的值。否则,设置这个变量值为word,并返回其值。
用途:如果变量未定义,则设置变量为默认值,并返回默认值。
范例:${value:=word},如果value未定义,则设置value值为word,返回表达式的值也为word。
${value:?"not defined"} 如果变量名存在且非null,则返回变量的值,否则显示变量名message,
并且退出当前的命令或者脚本。
用途:用于捕捉由于变量未定义而导致的错误,并退出程序。
范例:${value:?"not defined"}如果value未定义,则显示-bash:value: not defined 并退出。
${value:+word} 如果变量名存在且非null,则返回word。否则返回null。
用途:测试变量是否存在。
范例:${value:+word}如果value已经定义,返回word(也就是真)。

 

Shell特殊变量

1、位置变量

$0  获取当前执行的shell脚本的文件名

$n  获取当前执行的shell脚本的第n个参数值,n=1..9,当n=0时表示脚本的文件名,如果n大于9,需要用大括号括起来${10}

$#  获取当前执行的shell脚本后面接的参数总的个数

$*

$@

$*与$@的区别?

dirname  $0

basename  $0

 

2、进程状态变量

$?  获取执行上一个指令的返回值(0为成功,非零为失败)

$$  获取当前shell脚本的进程号(PID)

$!   获取上一个指令的PID

$_  在此之前执行命令的最后一个参数

参考:linux下set和eval的使用小案例精彩解答;

 

Shell函数

#!/bin/sh

if [ $# -ne 1 ]
then 
    echo "Usage:$0 {url}."
    exit 1
fi

function Check_Url(){
    curl -o /dev/null -s -w "%{http_code}" $1 && return 0 || return 1
}

Check_Url $1

 

脚本启动Mysql单实例和多实例

把脚本放到/etc/init.d,实现/etc/init.d/mysql01  start 启动,并且通过chkconfig对其进行开机启动和管理.

怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用?

 

#!/bin/sh
# chkconfig:  2345  20  60
# description: start or stop mysqld service 
 
让echo输出显示不同的颜色
echo要变换颜色的时候,要使用参数-e
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
例如: 
echo -e "\033[41;36m something here \033[0m"

其中41的位置代表底色, 36的位置是代表字的颜色

打印水果菜单并接受用户选择并输出对应颜色
#!/bin/sh
RED_COLOR="\033[31m"
GREEN_COLOR="\033[32m"
YELLOW_COLOR="\033[33m"
COLOR_END="\033[0m"

menu (){
cat <<END
    ===============
    1.apple
    2.banana
    3.pear
    ===============
END
}

while true 
do
menu
read -p "choose one number:" num
clear
case $num in
    1)
        echo -e "$RED_COLOR apple $COLOR_END"
        ;;
    2)
        echo -e "$YELLOW_COLOR banana $COLOR_END"
        ;;
    3)
        echo -e "$GREEN_COLOR pear $COLOR_END"
        ;;
    4)
        exit 0
        ;;
    *)
        echo "Usage: choose {1|2|3|4}"
        ;;
esac
done
 注意:
cat <<END
    ===============
    1.apple
    2.banana
    3.pear
    ===============
END
# cat <<END 需要顶格写,否则会出现问题
#!/bin/sh
RED_COLOR="\033[31m"
GREEN_COLOR="\033[32m"
YELLOW_COLOR="\033[33m"
COLOR_END="\033[0m"

menu (){
    echo 
    echo "=================="
    echo -e "1.\tapple"
    echo -e "2.\tbanana"
    echo -e "3.\tpear"
    echo -e "4.\texit"
    echo "=================="

}

while true 
do
menu
read -p "choose one number:" num
clear
case $num in
    1)
        echo -e "$RED_COLOR apple $COLOR_END"
        ;;
    2)
        echo -e "$YELLOW_COLOR banana $COLOR_END"
        ;;
    3)
        echo -e "$GREEN_COLOR pear $COLOR_END"
        ;;
    4)
        exit 0
        ;;
    *)
        echo "Usage: choose {1|2|3|4}"
        ;;
esac
done
 

 

 

 

你可能感兴趣的:(shell编程)