shell笔记

杀马特。学长 韩版系。学妹 提交于 2019-12-23 13:45:37

shell笔记

数字直接比较

命令 含义
-eq 等于,如:if [ $a -eq $b ]
-ne 不等于,如:if [ $a -ne $b ]
-gt 大于,如:if [ $a -gt $b ]
-ge 大于等于,如:if [ $a -ge $b ]
-lt 小于,如:if [ $a -lt $b ]
-le 小于等于,如:if [ $a -le $b ]
< 小于(需要双括号),如:(($a < $b))
<= 小于等于(需要双括号),如:(($a <= $b))
> 大于(需要双括号),如:(($a > $b))
>= 大于等于(需要双括号),如:(($a >= $b)

字符串比较

命令 含义 示例
-z string 如果 string 长度为零,则为真 [ -z “$myvar” ]
-n string 如果 string 长度非零,则为真 [ -n “$myvar” ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ “$myvar” = “one two three” ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ “$myvar” != “one two three” ]

文件比较

命令 含义 示例
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

ps相关命令

查看pid进程号
ps -ef | grep elasticsearch | grep -v grep | grep -v kill | awk '{print $2}'
查看存活的节点数(一般情况为1)
ps -ef | grep elasticsearch | grep -v "grep" | wc -l
查看节点是否存活
ps | grep elasticsearch | grep -v 'grep'

颜色相关命令

Green="\033[32m"
Red="\033[31m"
Yellow="\033[33m"
RedBG="\033[41;37m"
Font="\033[0m"
OK="${Green}[OK]${Font}"
Error="${Red}[错误]${Font}"
示例:
echo -e "${OK} ${RedBG} 开始启动elasticsearch ${Font}"

shell方法体

示例:
#!/bin/bash
Green="\033[32m"
Red="\033[31m"
Yellow="\033[33m"
RedBG="\033[41;37m"
Font="\033[0m"
OK="${Green}[OK]${Font}"
Error="${Red}[错误]${Font}"
ps_out=ps | grep elasticsearch | grep -v 'grep'
ps_jar=ps | grep displacement-0.0.1-SNAPSHOT.jar | grep -v 'grep'

is_elasticsearch() {
echo -e "${Error} \n $(tail -n 100 /home/shizeying/IdeaProjects/bigdata-dockerfile/resources/dis/start.sh) ${Font}"
elasticsearch=$(ps -ef | grep elasticsearch | grep -v "grep" | wc -l)
if [ "${elasticsearch}" -eq 1 ]; then
echo -e "${OK} ${RedBG} 开始启动elasticsearch ${Font}"
#    nohup /usr/local/bin/docker-entrypoint.sh eswrapper >>/app/elasticsearch.log 2>&1 &
#  else
echo -e "${Error} ${RedBG} 启动elasticsearch失败 ${Font}"
echo -e "${Error} $(tail -f 100 /home/shizeying/IdeaProjects/bigdata-dockerfile/resources/dis/start.sh) ${Font}"
fi
}

is(){
if [ ! -n "$ps_out" -a ! -n "$ps_jar" ]; then
echo "开始elasticsearch"

# shellcheck disable=SC2031
echo "开始jar"
sleep 70s && nohup java -jar /app/displacement-0.0.1-SNAPSHOT.jar >>/app/displacement-0.0.1-SNAPSHOT.log 2>&1 &
fi
if [[ $1 == "-d" ]]; then
while true; do sleep 1000; done
fi
}
main(){
is_elasticsearch
}
main

判读当前用户是否为root用户

is_root() {
  # shellcheck disable=SC2046
  if [ $(id -u) == 0 ]; then
    echo -e "${OK} ${Red} 当前用户是root用户,进入启动流程 ${Font}"
  else
    echo -e "${Error} ${RedBG} 当前用户不是root用户,请重新配置dockerfile ${Font}"
    exit 1
  fi
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!