shell 库
关于分割符
query_im_id()
{
id=$1
res=$(curl -s --location --request GET "x:x/x/${id}")
echo ${res}
}
OLD_IFS=$IFS
IFS='|'
for user in `cat im_user_list|awk '{print $0}'`
do
IFS=${OLD_IFS}
id=$(echo $user|awk '{print $1}')
username=$(echo $user|awk '{print $2}')
echo "get user: ${username} and id:${id} location"
query_im_id ${id}
done
[root@xxx7 sh]
oa13927xxx username|
关于数组
#!/bin/sh
checkExistdbname(){
grep -i "alter.*table" 11.sql|awk -F' ' '{print $3}'|grep '\.'|| echo 'alter table not dbname'
}
declare -A missingDbName=(["alter"]="alter.*table" ["delete"]="delete" ["insert"]="insert.*into" ["update"]="update" ["create"]="create.*table")
declare -A reminder=(["alter"]="alter" ["delete"]="delete" ["insert"]="insert into" ["update"]="update" ["create"]="create table" ["drop"]="drop database" ["procedure"]="create procedure")
declare -A illegalsql=(["drop"]="drop.*database" ["procedure"]="create.*procedure")
declare -A missingDbNameCol=(["alter"]=3 ["delete"]=3 ["insert"]=3 ["update"]=2 ["create"]=3)
dir=$1
for file in `ls $dir/*.sql`
do
echo "start check dbname of sqlfile ${file}:"
for key in ${!missingDbName[@]}
do
grep -i "\<${missingDbName[$key]}\>" ${file}|awk -v col=${missingDbNameCol[$key]} -F' ' '{print $col}'|grep -v '\.' && echo "It was missing DB NAME in :${reminder[$key]} sql on sql file:${file}"
done
done
for file in `ls $dir/*.sql`
do
echo "start check illegal sql of sqlfile ${file}:"
for key in ${!illegalsql[@]}
do
grep -i "\<${illegalsql[$key]}\>" ${file} && echo "It was cotainer illegal sql: ${reminder[$key]} on sql file:${file}"
done
done
关于post的引号
post_data(){
vpost_url=$1
vservice=$2
vnamespace=$3
vbadpod=$4
vstatus=$5
if [ ! -z "${vpost_url}" -a ! -z "${vservice}" -a ! -z "${vnamespace}" -a ! -z "${vbadpod}" -a ! -z "${vstatus}" ];then
for pervbadpod in ${vbadpod}
do
curl -H "Content-Type: application/json" -X POST -d '{"service":"'"${vservice}"'","namespace":"'"${vnamespace}"'","badpod":"'"${pervbadpod}"'","status":"'"${vstatus}"'"}' ${vpost_url} -H ${verify_key}
current_time=$(/bin/date '+%F %T')
echo "Time:${current_time},"service":"${vservice}","namespace":"${vnamespace}","badpod":"${vbadpod}","status":"${vstatus}""|tee -a $log
done
else
echo "miss the parameter"
fi
}
关于awk 过滤条件
get_bad_pod(){
echo 'get bad podname:'
bad_podname=$(kubectl get pod -n ${namespace}|grep -v 'READY'|awk -v servicename=${service} '{split($2,a,"/");if($1~ servicename"-[A-Za-z0-9]*-[A-Za-z0-9]*$" && a[1]!=a[2]||$3 !~/Running/) print $1}')
#bad_podname=$(kubectl get pod -n ${namespace}|awk -v servicename=${service} '{if($1~ servicename"-[A-Za-z0-9]*-[A-Za-z0-9]*$" && $3 !~/Running/) {print $1}}')
}
关于echo 颜色显示
cecho(){
str="$1"
echo -e "\033[31m ${str}\033[0m"
}
关于数值运算
none200=$(cat xx_check_117.log |grep 2021-11-$d|awk -F '|' '{print $1" "$4}'|grep -v '200 OK'|grep "2021-11-$dT"|wc -l)
total=$(cat xx_check_117.log |grep 2021-11-$d|wc -l)
rait=$(echo "scale=5;${none200} / ${total}"|bc)
关于时间
current_time=$(/bin/date '+%Y%m%d%H%M%S')
关于 exec,source ./xx.sh 是否fork
#!/bin/sh
echo $$
echo 'i am main process'
echo mypid is :$$
echo 'run sub process by shell'
/root/t1.sh shell
echo 'run sub process by source'
. /root/t1.sh source
echo 'run sub process by exec'
exec /root/t1.sh exec
关于函数返回值和函数体的echo输出
function check(){
n=$1
if [ ! -z "${n}" -a ${n} -gt 10 ];then
echo "enter 100"
return 100
else
echo 'enter less than 10'
return 200
fi
}
check 15
res=$?
echo ${res}
r2=$(check 8)
res=$?
echo ${res}
几个点
1、函数返回值只靠执行完函数$?来获取
2、函数返回值只能是数值型
3、函数返回如果有赋值给变量,则echo输出被屏蔽
比如,如上输出结果为:
[root@xx_6_78 ~]
enter 100
100
200
因为调用r2=$(check 8),所以没有输出enter less than 10