替换
sed 's/abc/efg/g'
var=123
var="abc"
var='efg'
双引号支持特殊字符转义,单引号则不支持转义
字符串开启转义
echo -e "abc\nd"
#abd
#d
字符串未开启转义
echo "abc\nd"
#abc\nd
数字变量计算
i=1
echo $((i+5))
#6
遍历i更新
((i=i+3))
echo $i
#9
浮点数字需要用
a=1
b=2.3
echo `awk "BEGIN{print ${a} /${b}}"`
#0.833333
通过下角标取值
array=(a b c)
echo ${array[2]}
# c
数组越界以后取不到值
取数组里边所有值
echo ${array[*]}
echo ${array[@]}
#a b c
取数据的长度
echo ${#array[*]}
# 3
offset是索引,下角标第几个开始截取到最后,索引从0开始
${value:offset}
value=abcd
echo ${value:2}
# cd
${value:offset:length}
offset表示索引,从0开始
length表示截取个数,从1开始
value=abcd
echo ${value:2:1}
# c
${value#pattern}
pattern表示要去除的字符
value=abc
echo ${vaule#a}
# bc
patter必须是开头的字符,否则匹配不到
${value%pattern}
pattern表示要去除的字符
value=efg
echo ${value%g}
#ef
${value##*pattern}
var=attattttt
echo ${var##a}
#ttttt
截取到最后一个a位置
${value%%pattern*}
var=attattttt
echo ${var##t}
#a
截取到最后一个t位置
${var/oldstr/newstr}
var="testerhome"
echo ${var/home/myhome}
#testermyhone
相等
[ 1 -eq 1 ]
echo $?
# 0 真
不相等
[ 1 -ne 2 ]
echo $?
# 0 真
大于
[ 2 -gt 1 ]
# 0 真
大于等于
[ 2 -ge 1 ]
# 0 真
小于
[ 1 -lt 2 ]
# 0 真
小于等于
[ 1 -le 2 ]
# 0 真
或者用(())比较
((10>8))
# 0 真
判断字符串相同
=号两边有空格
[ "abc" = "efg" ]
# 1 假
判断字符串不相等
[ "abc" != "efg" ]
# 0 真
判断某个字符不为空
var="test"
[ -n ${var} ]
# 0 真
判断某个字符为空
[ -z ${var1} ]
# 0
判断某个字符是否以什么开头的
[[ "xxxx" = x* ]]
echo $?
# 0 真
[[ "xxxx" = z* ]]
echo $?
# 1 假
判断某个字符是否以什么结尾
[[ "xxxt" = *t ]]
echo $?
# 0 真
[[ "xxxt" = *x ]]
echo $?
# 1 假
??替代两个字符,是否等于x开始的三个字符
[[ "xxx" = x?? ]]
echo $?
# 0 真
[[ "xxxx" = x?? ]]
echo $?
# 1 假
且
[ 2 -eq 2 -a 3 -eq 3 ]
echo $?
# 0 真
[[ 2 -eq 2 && 3 -eq 3 ]]
用&&必须是[[]]括起来
echo $?
# 0 真
或
[ 2 -eq 2 -o 1 -eq 3 ]
echo $?
# 0真
[[ 2 -eq 2 || 1 -eq 3 ]]
echo $?
# 0真
取反
[ ! 2 -ge 1 ]
echo $?
判断文件是否存在
[ -e test.log ]
判断文件是否是文件夹
[ -d shelltest ]
判断文件是否为普通文件
[ -f test.log ]
判断文件是否可读
[ -r test.log ]
判读文件长度不为0
[ -s test.log ]
判断文件是否可写
[ -w test.log ]
判断文件是否可执行
[ -x test.log ]
ps:[[]]是[]的扩展,在老的sh里并不支持。推荐用[]
$?表示上次获取的结果
0表示正确
$true
echo $?
非0表示错误
if [ 2 -eq 2 ] then echo "pass" fi
if [ 2 -eq 1 ]
then
echo "pass"
else
echo "fail"
fi
# pass
if [ 2 -eq 1 ]
then
echo "pass"
elif [ 2 -eq 2 ]
then
echo "fail"
fi
#fail
if [ 2 -eq 1 ]
then
echo "pass"
elif [ 2 -eq 3 ]
then
echo "fail"
else
echo "noting"
fi
# noting
|相当于或的关系
*)表示都不匹配,走这个条件
result="start"
case ${result} in
s|start)echo "start"
;;
stop)echo "stop"
;;
*)echo "default"
;;
esac
**计数for循环**
for((i=0;i<10;i++));
do
echo ${i}
done
两个(())
i++表示步长
i=i+2,表示跨度两个步长
**使用for循环遍历数组**
array=(a b c)
for index in ${array[*]};
do
echo ${index}
done
array=(a b "c d")
for index in "${array[*]}";
do
echo ${index}
done
tmp_file=/Users/xinxi/Desktop/aliyun1.txt
lines=()
OPTS=""
cat /Users/xinxi/Desktop/aliyun.txt | while read line
do
echo $line >> $tmp_file
done
cat $tmp_file
# set user root
# set ipaddress 185135xxxx@shell.xxxx-studio.com
# set passwd xxxxx
# set timeout 30
# spawn ssh $ipaddress
# expect {
# "*password:" { send "$passwd\r" }
# "yes/no" { send "yes\r";exp_continue }
# }
# interact
开启服务器
python -m CGIHTTPServer 8000
创建文件
cgi-bin/hello.py
权限
chmod 777 hello.py
浏览器访问
http://127.0.0.1:8000/cgi-bin/h.py
#!/bin/bash
#初始化变量
#定义蜘蛛UA信息(默认是百度蜘蛛)
UA='+http://www.baidu.com/search/spider.html'
#前一天的日期(apache日志)
DATE=`date +%Y%m%d -d "1 day ago"`
#定义日志路径
logfile=/data/wwwlogs/www.chanzhi.org_apache.log-${DATE}.log
#定义死链文件存放路径
deathfile=/data/wwwroot/www.chanzhi.org/deathlink.txt
#定义网站访问地址
website=http://www.chanzhi.org
#分析日志并保存死链数据
for url in `awk -v str="${UA}" '$9=="404" && $15~str {print $7}' ${logfile}`
do
grep -q "$url" ${deathfile} || echo ${website}${url} >>${deathfile}
done
#!/bin/bash
read_dir(){
for file in `ls -a $1`
do
if [ -d $1"/"$file ]
then
if [[ $file != '.' && $file != '..' ]]
then
read_dir $1"/"$file
fi
else
#echo $1"/"$file
time=1
fi
done
}
#测试目录 test
read_dir "/Users/xinxi/Desktop/mobileperf"
rename 's/image/test/' *
参考
https://mp.weixin.qq.com/s/-5Q-cT2lWI9OkDJc51fCOA