
通过等号(=)为变量分配值,等号两边不能有空格
# file = "/root/01.txt" //错误
# file="/root/01.txt" //正确
在对变量赋于字符串值时,建议使用引号将其包裹。如果字符串中存在空格,请一定要使用单引号或双引号将整个内容包裹。注意:单引号里的内容原封不动的输出,双引号里有变量的调用则会调用变量
# Var1="$Var"
# Var1='Var is empty'
# Var1="Var is empty $array"
如果需要增加变量的值,那么可以进行变量值的叠加。不够变量需要用双引号包含”$变量名”或${变量名}
# echo ${VAR1}db.log
# echo "$VAR1"db.log
# echo $VAR1db.log //如果直接写有可能会输出错误内容

写入多行文字到某文件
echo "aaa" >> /home/kevingo/example.txt
cat>/lib/systemd/system/nginx.service<<EOF
....
EOF
多行注释详解
<<EOF
.....
EOF
对shell命令结果进行行数统计
wc -l
grep -c
# cat xxx.txt | wc -l
# netstat -tupln |grep 9501 |wc -l
# ps aux |grep 'sersync2'|grep -v 'grep'|wc -l
截取pid
# nslookup ns.time50.com 8.8.8.8 | tail -2 | head -1
# cut -f 2,4 student.txt
free -h | head -2 | tail -1 | awk '{printf $4}' | grep 'M'
tail -2 //截取最后2行
head -1 //截取最前2行
cut [选项] 文件名
-f 列号:提取第几列
d 分隔符:按照指定分隔符分割列
awk 一次读入一整行,默认以tab键或者空格为分隔符将一行分为多个字段,表示为$1、$2、$3...其中$0表示文件名
//pid
pid=$(netstat -anp|grep 3306|awk '{printf $7}'|cut -d/ -f1)
pid=$(echo "$p_command_str" | awk '{printf $2}'|cut -d/ -f1)
//获取文件大小
file_size=`du -sh ${cache_file} |awk '{print $1}' | cut -f 1 -d "G"`
//awk例子用法
# netstat -anp|grep 3306|awk '{printf $7}'
23693/php-fpm:17418/php-fpm:23696/php-fpm:23738/php-fpm:17465/php-fpm:17464/php-fpm:17419/php-fpm:17463/php-fpm:6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld6389/mysqld
#字符串截取
${string:position:length}
status=123.456.789M
# echo "${status:0:-1}"
//123.456.789
判断句
//中括号两则必要有空格
[ "$A" = "$B" ] ##如果相等,字符串比较,等号之间必须有空格
[ "$A"="$B" ] ##如果相等,数字比较,等号之间不能有空格
[ "$A" -eq "$B" ] ##如果相等,数字比较,等号之间不能有空格
[ "$A" == "$B" ] ##如果相等,字符比较
[ "$A" != "$B" ] ##如果不相等
[ "$A" -ne "$B" ] ##如果不相等
[ "$A" -le "$B" ] ##如果小于等于
[ "$A" -lt "$B" ] ##如果小于
[ "$A" -ge "$B " ] ##如果大于等于 数字比较(整数),
[ "$A" -gt "$B" ] ##如果大于 数字比较(整数),
[ "$A" -ne "$B" -a "$A" -gt "$B" ] ##A 不等于 B 并且 A 大于B
[ "$A" -ne "$B" -o "$A" -gt "$B" ] ##A不等于B 或者 A大于B
[ -z "$A" ] ##如果为空
[ -n "$A" ] ##如果不为空
if [ ! -d "/data/" ];then #如果文件夹不存在
if [ ! -f "/data" ];then #如果文件不存在
//或比较
if [[ `is_not_ipaddr $ip` -eq 1 || `is_not_ipaddr $dns_ip` -eq 1 ]];then
echo "获取IP地址失败!"
fi
小数比较
小数的判断方法,博主试了网上很多的方法,他们都是无脑抄的吗? 说什么awk, expr 的人都是垃圾,这些方法都是有bug的!!只能比较第一位数字,坑爹!! ,压根就没有测试过 , 亲测只有下面的方法有效:
#!/bin/bash
#检查某个文件夹的大小,如果超过指定大小则清空
cache_file=/www/cache
file_size=`du -sh ${cache_file} |awk '{print $1}' | cut -f 1 -d "G"`
#echo ${file_size} ;
maxsize=30
if [ $(echo "$file_size < $maxsize"|bc) -eq 1 ]; then
echo "$file_size 小于 $maxsize"
else
echo "$file_size 大于 $maxsize"
fi
#设置默认内存大小,如果小于这个3G内存,则清缓存
max_size_g=4
size_g=$(free -h | head -2 | tail -1 | awk '{printf $4}' | grep 'G')
if [ -n "$size_g" ];then
memory_size="${size_g:0:-1}"
if [ $(echo "$memory_size < $max_size_g"|bc) -eq 1 ]; then
echo "内存大小: $memory_size 小于 $max_size_g , 准备进行清理..."
sync; echo 3 > /proc/sys/vm/drop_caches
echo "清理后的内存大小为: $(free -h | head -2 | tail -1 | awk '{printf $4}') "
else
echo "$memory_size G大于 $max_size_g G"
fi
fi