目录
一、基础正则表达式
1、正则表达式与通配符的区别
适用范围 匹配范围 正则表达式 字符串 包含匹配 通配符 文件名 完全匹配
2、基础正则表达式
二、字符截取命令
1、cut字段提取命令
举例说明:
cut命令的局限,这里df -h的输出中使用了“空格作为分隔符”,所以造成了cut的局限性
2、printf命令
最常用的就是:\n,\r,\t
举例:
3、awk命令
awk是一行一行读取并处理数据。
举例:
awk默认识别的分隔符:制表符和空格
需要使用自己定义的分隔符,需要采用FS
由于“awk是一行一行读取并处理数据”,所以需要在读取数据之前就得把提前设定好分隔符(添加BEGIN)。
否则,先读入了第一行,没有用设定好的分隔符(采用了默认分隔符),后面的几行才开始采用设定好分隔符。
对比:
cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {printf $1 "\t" $3 "\n"}'
cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
4、sed命令
sed命令主要是针对行进行操作。
举例:
对比下面两行代码,体现sed -n的作用
因为这里面没有使用-i选项 ,所以只会更改sed输出内容而不会更改文件本身。
使用-i直接写入文件
三、字符处理命令
1、排序命令sort
2、统计命令wc
四、条件判断
1、按照文件类型进行判断
最常用的就是-d,-e,-f
2、按照文件权限进行判断
最常用的就是-r,-w,-x
3、两个文件之间的比较
4、两个整数之间的比较
equal | eq | 相等 |
not equal | ne | 不相等 |
greater than | gt | 大于 |
less than | lt | 小于 |
greater than or equal | ge | 大于等于 |
less than or equal | le | 小于等于 |
5、字符串的判断
6、多重条件判断
五、流程控制
1、if语句
(1)、单分支if条件语句
(2)、双分支if条件语句
#!/bin/bash
ntpdate asia.pool.ntp.org &> /dev/null
date=$(date +%y%m%d)
size=$(du -sh /etc)
if [ -d /tmp/dbback ]
then
echo "Date is $date" > /tmp/dbback/db.txt
echo "Size is $size" >> /tmp/dbback/db.txt
cd /tmp/dbback
tar -zcf etc_$date.tar.gz /etc db.txt &> /dev/null
rm -rf /tmp/dbback/db.txt
else
mkdir /tmp/dbback
echo "Date is $date" > /tmp/dbback/db.txt
echo "Size is $size" >> /tmp/dbback/db.txt
cd /tmp/dbback
tar -zcf etc_$date.tar.gz /etc db.txt &> /dev/null
rm -rf /tmp/dbback/db.txt
fi
#!/bin/bash
port=$(nmap -sT 192.168.48.110 | grep tcp | grep http | awk '{ printf $2 }')
echo $port
if [ "$port" == 'open' ]
then
echo "$(date) httpd is ok !!" >> /tmp/httpd_acc.log
else
/etc/re.d/init.d/httpd restart &> /dev/null
echo "$(date) httpd reboot!!" >> /tmp/httpd_err.log
fi
(3)、多分支if条件语句
#!/bin/bash
read -p "Please input a filename: " file
if [ -z "$file" ]
then
echo "Error,please input a filename" >> /tmp/input.txt
cat /tmp/input.txt
exit 1
elif [ ! -e "$file" ]
then
echo "$file Your input is not a file " >> /tmp/input.txt
cat /tmp/input.txt
exit 2
elif [ -f "$file" ]
then
echo "$file is a regular file !!" >> /tmp/input.txt
cat /tmp/input.txt
elif [ -d "$file" ]
then
echo "$file is a directory!" >> /tmp/input.txt
cat /tmp/input.txt
else
echo "$file is an other file!"
fi
2、case语句
#!/bin/bash
read -p "Please choose yes/no :" -t 30 cho
case $cho in
"yes")
echo "Your choose is yes!"
;;
"no")
echo "Your choose is no!"
;;
*)
echo "Your choose is error!"
esac
3、for循环
#!/bin/bash
for time in morning noon afternoon evening
do
echo "This time is $time!"
done
#!/bin/bash
cd /root/sh
ls *.sh > ls.log
for i in $(cat ls.log)
do
echo "this is $i file"
done
#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
s=$(($i+$s))
done
echo "the sum of 1-100 is $s"
#!/bin/bash
read -t 30 -p "input name:" name
read -t 30 -p "input num:" num
read -t 30 -p "input password:" pass
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
then
y=$(echo $num | sed 's/^[0-9]*$//g')
if [ -z "$y" ]
then
for((i=0;i<=$num;i=i+1))
do
echo $i
done
fi
fi
4、while循环
#!/bin/bash
i=0
s=0
while [ $i -le 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo "the sum of 0-100 is $s"