lnmp 脚本精简解读

Posted on Posted in bash

lnmp 脚本精简解读

以前有一篇解读lanmp安装文件centos.sh,那是好几年前的事了,越做越好!

https://lnmp.org/ 的脚本,堪称范例

包含文件

# 包含的文件内容,一般都是函数,或者是 k=v 的形式。两种方法
# 第一种,点 . 后面 + 空格,+ 文件
. include/main.sh
# 第二种,source
source include/main.sh

判断字符串长度为 0

if [ -z ${DBSelect} ]; then  
    echo 'length  0' # 字符串长度为 0,进这里
fi

[] 与 [[]]

判断变量为空时,[] [[]] 是没有区别的

  • [ $a ]
  • [[ $a ]]

test

  • test -z "" # 判断字符串为空,空为真,非空为假
  • test -n "" # 判断字符串不空,空为假,非空为真。注意:-n 选项,判断变量时,要加双引号,eg,test -n "$b"

[] 与 test 是等效的

  • [ -z $a ] # 判断字符串为空,空为真,非空为假
  • [ -n "$a" ] # 判断字符串不空,空为假,非空为真。注意事项与上面相同

[[]] 是不需要引号的

  • [[ $a ]]
  • [[ $a ]]

组合判断条件

  • [ 3 -gt 1 ] && [ 5 -lt 8 ]
  • [[ 3 -gt 1 && 5 -lt 8 ]]

判断满足正则 =~,只能应用[[]]

  • [[ "${a}" =~ ^[345789]$ ]]

pidof

  • -s:仅返回一个进程号;
  • -c:仅显示具有相同“root”目录的进程;
  • -x:显示由脚本开启的进程;
  • -o:指定不显示的进程ID。
# 
pidof java
kill `pidof java`

按下开始

Press_Start()
{
    echo ""
    Echo_Green "Press any key to start...or Press Ctrl+c to cancel"
    OLDCONFIG=`stty -g`
    stty -icanon -echo min 1 time 0
    dd count=1 2>/dev/null
    stty ${OLDCONFIG}
}

判断文件存在 和 版本信息

if [ -s /usr/bin/python3 ]; then
        eval ${DISTRO}_Version=`/usr/bin/python3 -c 'import platform; print(platform.linux_distribution()[1])'`
    elif [ -s /usr/bin/python2 ]; then
        eval ${DISTRO}_Version=`/usr/bin/python2 -c 'import platform; print platform.linux_distribution()[1]'`
    fi

grep

grep -Eqi "release 5." /etc/redhat-release
grep -Eqi '^127.0.0.1[[:space:]]*localhost' /etc/hosts # 正则匹配空格
  • -a 不要忽略二进制数据。
  • -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
  • -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
  • -c 计算符合范本样式的列数。
  • -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
  • -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
  • -e<范本样式> 指定字符串作为查找文件内容的范本样式。
  • -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
  • -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
  • -F 将范本样式视为固定字符串的列表。
  • -G 将范本样式视为普通的表示法来使用。
  • -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
  • -H 在显示符合范本样式的那一列之前,标示该列的文件名称。
  • -i 忽略字符大小写的差别。
  • -l 列出文件内容符合指定的范本样式的文件名称。
  • -L 列出文件内容不符合指定的范本样式的文件名称。
  • -n 在显示符合范本样式的那一列之前,标示出该列的编号。
  • -q 不显示任何信息。
  • -R/-r 此参数的效果和指定“-d recurse”参数相同。
  • -s 不显示错误信息。
  • -v 反转查找。
  • -w 只显示全字符合的列。
  • -x 只显示全列符合的列。
  • -y 此参数效果跟“-i”相同。
  • -o 只输出文件中匹配到的部分。

wget 文件下载

# 显示进度条,使用IPv4
wget -c --progress=bar:force --prefer-family=IPv4 --no-check-certificate ${url}

判断目录为真

[[ -d "${DirName}" ]]

颜色显示 和 输入换行

字体颜色包括:0=重置,30=黑色,31=红色,32=绿色,33=黄色,34=蓝色,35=洋红,36=青色,37=白色

背景颜色包括:0=重置,40=黑色,41=红色,42=绿色,43=黄色,44=蓝色,45=洋红,46=青色,47=白色

\e[1;32m:将字体颜色设为绿色,\e[0m:将颜色重置

echo -e "nameserver 208.67.220.220\nnameserver 114.114.114.114"

Color_Text()
{
  echo -e " \e[0;$2m$1\e[0m"
}

Echo_Red()
{
  echo $(Color_Text "$1" "31")
}

Echo_Green()
{
  echo $(Color_Text "$1" "32")
}

Echo_Yellow()
{
  echo $(Color_Text "$1" "33")
}

Echo_Blue()
{
  echo $(Color_Text "$1" "34")
}

用户输入信息

# 把用户输入变为变量 tips
read -s -p "提示信息:" tips

cat

cat > /tmp/filename<<EOF
输入内容
EOF

基本防火墙

/sbin/iptables -I INPUT 1 -i lo -j ACCEPT
/sbin/iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -I INPUT 3 -p tcp --dport 22 -j ACCEPT
/sbin/iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
/sbin/iptables -I INPUT 6 -p tcp --dport 3306 -j DROP
/sbin/iptables -I INPUT 7 -p icmp -m icmp --icmp-type 8 -j ACCEPT

设置时间

rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
» 转载请注明来源:呢喃 » lnmp 脚本精简解读

Leave a Reply

Your email address will not be published. Required fields are marked *

six − three =