第十一讲Linux——Shell编程学习

目录

 

一、基础正则表达式

1、正则表达式与通配符的区别

2、基础正则表达式 

二、字符截取命令

1、cut字段提取命令

2、printf命令

3、awk命令

4、sed命令

三、字符处理命令

1、排序命令sort

2、统计命令wc 

四、条件判断

1、按照文件类型进行判断

 2、按照文件权限进行判断

 3、两个文件之间的比较

4、两个整数之间的比较 

5、字符串的判断

6、多重条件判断

五、流程控制

 1、if语句

(1)、单分支if条件语句

(2)、双分支if条件语句 

(3)、多分支if条件语句  

2、case语句

3、for循环

4、while循环


一、基础正则表达式

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、两个整数之间的比较 

equaleq

相等

not equalne不相等
greater thangt大于
less thanlt小于
greater than or equalge大于等于
less than or equalle小于等于

 

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"

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值