记录shell脚本漫漫长路one(很基础)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
背景: 实现进程唤醒的一个小需求
编程开始:
- 进程探测
- 配置编排
- 唤醒操作
一、基础用法
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
附录:
文件/文件夹(目录)判断
[ -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
# 读取临时配置,启动进程
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
二、业务相关(可以直接跳转到这里)
- shell读取json获取配置文件中的值
这里使用jq工具 。。。 竟然不支持上传文件
- 黑名单,白名单的公共方法
# 添加白名单列表到执行配置
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
}
- 删除文件中指定的内容行
sed -i '#$process_key#d' $handler_config_file
- 根据关键字获取进程号
ps gaux | grep $process_key | grep -v grep | awk '{print $2}'
- 根据进程号获取执行路径
pwdx $var | awk '{print $2}'
- 重复项去重
# 对重复启动项去重
sort -k2n $temp_process_start_file | sed '$!N; /^\(.*\)\n\1$/!P; D'
- 操作crontab,并对crontab进行操作
echo $custom_cron" "$custom_bash_pat >>/var/spool/cron/root
- 根据时间,大小,删除目录文件
find ${line} -type f -mtime +${dir_del_day} -size +${dir_del_size}M -delete
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |