背景: 实现进程唤醒的一个小需求

编程开始:

  1. 进程探测
  2. 配置编排
  3. 唤醒操作

一、基础用法

if用法:

if [ command ];then
   符合该条件执行的语句
elif [ command ];then
   符合该条件执行的语句
else
   符合该条件执行的语句
fi

例子:

不等于空(以下只是简单示例if用法,里边的变量不要强求和较真)

if [[ -n "${dir_suffix}" ]]; then
	excute_bash=$excute_bash" -name *"$dir_suffix
	check_flag=" -name '*."$dir_suffix"'"
fi
if [ "$process_key" == "" ]; then
	break
else
echo $process_key >>$temp_dir_start_file

fi

附录:

记录shell脚本漫漫长路one(很基础)_字符串

文件/文件夹(目录)判断
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d DIR ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

字符串判断
[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真;
[ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真;
[ STRING1 = STRING2 ] 如果两个字符串相同则为真 ;
[ STRING1 != STRING2 ] 如果字符串不相同则为真 ;
[ STRING1 ]  如果字符串不为空则为真,与-n类似

数值判断
INT1 -eq INT2           INT1和INT2两数相等为真 ,=
INT1 -ne INT2           INT1和INT2两数不等为真 ,<>
INT1 -gt INT2            INT1大于INT1为真 ,>
INT1 -ge INT2           INT1大于等于INT2为真,>=
INT1 -lt INT2             INT1小于INT2为真 ,<</div>
INT1 -le INT2             INT1小于等于INT2为真,<=

复杂逻辑判断
-a 与
-o 或
! 非

exp1: 如果a>b且a
if (( a > b )) && (( a < c ))
或者
if [[ $a > $b ]] && [[ $a < $c ]]
或者
if [ $a -gt $b -a $a -lt $c ]

exp2:如果a>b或a
if (( a > b )) || (( a < c ))
或者
if [[ $a > $b ]] || [[ $a < $c ]]
或者
if [ $a -gt $b -o $a -lt $c ]
 
"||"和"&&"在SHELL里可以用,也就是第一个写成if [ a>b && a

for用法:

 for 变量名 in 取值列表

 do  

  命令序列  done

记录shell脚本漫漫长路one(很基础)_sed_02

记录shell脚本漫漫长路one(很基础)_字符串_03

# 读取临时配置,启动进程
    while read -r line; do
        sh $line
    done <$temp_process_start_file
for filename in ${file_array[@]}; do
        file_size=$(du ${filename} | cut -f1)
        total_size=file_size+total_size
    done

二、业务相关(可以直接跳转到这里)

  1. shell读取json获取配置文件中的值

这里使用jq工具  。。。 竟然不支持上传文件


  1. 黑名单,白名单的公共方法
# 添加白名单列表到执行配置
add_writelist() {
    write_key=$1
    writelistfile=$2
    handler_config_file=$3
    # 添加到最后
    if [ -f "$writelistfile" ]; then
        $write_list=$(cat $writelistfile | jq -r '.write_list[0].'$write_key)
        i=1
        while ((1 == 1)); do
            process_key=$(echo $write_list | cut -d "," -f $i)
            if [ "$process_key" == "" ]; then
                break
            else
                echo $process_key >>$handler_config_file

                ((i++))
            fi
        done
    fi
}


# 从执行配置中去除黑名单列表项
remove_config_with_blacklist() {
    black_key=$1
    blacklistfile=$2
    handler_config_file=$3
    # 添加到最后
    if [ -f "$blacklistfile" ]; then
        $black_list=$(cat $blacklistfile | jq -r '.black_list[0].'$black_key)
        i=1
        while ((1 == 1)); do
            process_key=$(echo $write_list | cut -d "," -f $i)
            if [ "$process_key" == "" ]; then
                break
            else
                sed -i '#$process_key#d' $handler_config_file
                ((i++))
            fi
        done
    fi

}


  1. 删除文件中指定的内容行
sed -i '#$process_key#d' $handler_config_file
  1. 根据关键字获取进程号
ps gaux | grep $process_key | grep -v grep | awk '{print $2}'
  1. 根据进程号获取执行路径
pwdx $var | awk '{print $2}'
  1. 重复项去重
# 对重复启动项去重
sort -k2n $temp_process_start_file | sed '$!N; /^\(.*\)\n\1$/!P; D'
  1. 操作crontab,并对crontab进行操作
echo $custom_cron" "$custom_bash_pat >>/var/spool/cron/root
  1. 根据时间,大小,删除目录文件
find ${line} -type f -mtime +${dir_del_day} -size +${dir_del_size}M -delete
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell