Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本

source

source /root/.bashrc        #让修改后的配置文件在不重启系统的情况下生效。source等同于.

环境变量目录

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc

调用顺序如下图
这里写图片描述

/etc/profile的作用:
USER
LOGNAME
MAIL
PATH
HOSTNAME
HISSIZE
umask
调用/etc/profile.d/*.sh

注销时候生效的环境变量配置文件:~/.bash_logout
其他配置文件:~/bash_history

终端欢迎信息

  1. 本地终端欢迎信息:/etc/issue
    这里写图片描述

  2. 远程终端欢迎信息:/etc/issue.net
    转义符在该文件中并不生效
    要显示次欢迎信息需要在ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”。

  3. 登录后的欢迎信息:/etc/motd。远程和本地终端都生效。

正则表达式

  • 正则表达式用来匹配符合条件的字符串,是包含匹配,grep,awk,sed命令等支持正则表达式。
  • 通配符用来匹配符合条件的文件名,是完全匹配,ls、find、cp等不支持正则,所以只能使用shell自带的通配符来进行匹配。
*              #匹配前一个字符0次或任意次
.              #匹配除换行符外的任意一个字符
^              #匹配行首
$              #匹配行尾
[]             #匹配中括号中任意一个字符,只匹配一个字符。
[^]            #匹配不再中括号中任意一个字符,只匹配一个字符。 
\              #转义符
\{n\}          #匹配前面的字符n次
\{n,\}         #匹配前面的字符至少n次 
\{n,m\}        #匹配前面的字符n次到m次



grep "a*" test.txt        #匹配所有内容
grep "aa*" test.txt       #匹配至少含有一个a的行

cut

cut -f 2 student.txt                                #-f表示提取第几列
cut -f 2,3 student.txt                          
cut -d ":" -f 2,3 /etc/passwd                       #以某字符串分割

print,printf

printf 按格式输出
printf ‘输出类型输出格式’输出内容
printf ‘%s\t %s\t %s\t\n’ $(cat student.txt)

print命令在awk中会自动增加一个换行符。默认linux没有print命令
printf命令需要换行的话必须手工加入换行符。

awk

awk ‘条件1{动作1}条件2{动作2}……’ 文件名

awk 'BEGIN{print "welcome!!!"}{print $2"\t"$3}' student.txt

df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1

cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1"\n"}'

#FS指定分割符,因为默认的是制表符和空格,不是的话需要指定。awk先读取一行,然后才开始格式化输出。加begin是把第一行也格式化输出。不然后第一行不会匹配预格式。

cat student.txt | grep -v Name | awk '$6 >= 60 {print $2}'

sed

sed [选项] ‘[动作]’ 文件名
选项

选项
-n:           #一般的sed会把所有内容输出,加入此选项会把经过处理的行输出。例如 sed '2p' /etc/passwd 会输出所有的行,而 sed -n '2p' /etc/passwd 会输出第二行
-e            #允许对数据应用多条sed命令编辑
-i            #sed修改的结果直接应用于文件,而不是在屏幕上输出


动作
a       #在当前行后添加一行或多行   如果是多行记得加上续行符号\
c       #用c后面的字符串替换原数据行
i       #在当前行前插入一行或多行
d       #删除指定的行
p       #输出指定的行
s       #字符串替换   例如:s/oldstr/newstr/g

sed -n '2p' /etc/passwd
sed '2immm' /etc/passwd
sed -e 's/root//g;s/michael/leon/g' /etc/passwd

sort

sort [选项] 文件名
选项
-f          #忽略大小写
-n          #以数值型进行排序,默认以字符串型
-r          #反向排序
-t          #指定分隔符,默认是制表符
-k n[,m]    #按照指定字段范围排序,从第n
个字段开始,第m个字段结束,默认到行尾。
sort -t ":" -k 3,3 /etc/passwd
sort -n -t ":" -k 3,3 /etc/passwd

判断

[ -d /root ] && echo yes || echo no      #判断/root
是否存在并且是个目录
-e 文件             #判断该文件爱你是否存在
-f 文件             #判断该文件是否存在并且是普通文件。
-s 文件             #判断文件是否存在并且非空
-r 文件             #判断文件是否存在并且拥有读权限
-w 文件
-x 文件


两种判断格式
1. test -e /root
2. [ -e /root ]


文件比较
文件1 -nt 文件2     #文件1的修改时间比2的新为真
文件1 -ot 文件2     #文件1比文件2旧则为真
文件1 -ef 文件2     #文件1和文件2的inode是否一样,可以理解为判断两个文件是否是同一个文件。


整数判断
整数1 -eq 整数2
整数1 -gt 整数2
整数1 -lt 整数2
整数1 -ne 整数2     #不等于
整数1 -ge 整数2     #大于等于
整数1 -le 整数2     #小雨等于


字符串判断
-z 字符串            #字符串为空则真
-n 字符串            #字符串非空为真
字符串1 == 字符串2    #可以用一个等号,但是容易与赋值混淆
字符串1 != 字符串2


逻辑关系
判断1 -a 判断2
判断1 -o 判断2
!判断

例子:
aa=12
[ -n "$aa" -a "$aa" -gt 23 ] && echo yes || echo no

if、for、case


if [ 条件判断式 ];then
    程序
fi


----------


if [ 条件判断式 ]
    then
        程序
fi


----------


if [ 条件判断式 ]
    then
        条件成立时,程序端
    else
        条件不成立时,程序端
fi


----------


for i in $(cat ls.log)
    do
        tar -zxf $i & > /dev/null
    done


----------


for(( i=0;i<10;i++ ))
    do
        程序
    done


----------


case $变量名 in
    "值1")
        程序1
        ;;
    "值2")
        程序2
        ;;
    *)
        默认程序
        ;;
esac

监控磁盘率使用情况

#!/bin/bash
rate=$( df -h | grep /dev/sda5 | awk '{print $5}' | cut -d '%' -f 1 )
if [ $rate -ge 80 ]
    then
        echo '/dev/sda5 is full'
fi

备份mysql数据库

#!/bin/bash
ntpdate asia.pool.ntp.org &>/dev/null
date=$(date +%y%m%d)                      # +%y%m%d  090902
size=$(du -sh /var/lib/mysql)             # du -s显示目录总大小  summary
if [ -d /tmp/dbbak ]
    then
        echo 1>/dev/null
    else
        mkdir /tmp/dbbak
fi
echo "Date:$date!">>/tmp/dbbak/dbinfo.txt
echo "Size:$size!">>/tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt    

判断apache是否启动

#!/bin/bash
date=$(date +%y%m%d) 
port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print $2}')   #用nmap命令扫描服务器,截取apache状态,赋值给port
if [ "$port"=="open" ]
    then 
        echo "$date httpd is ok!" >> /tmp/autostart-acc.log
    else 
        /etc/rc.d/init.d/httpd start &>/dev/null
        echo "$date restart httpd!" >> /tmp/autostart-acc.log
fi

批量解压缩脚本

#!/bin/bash
cd /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
    do
        tar -zxf $i & > /dev/null
    done
rm -rf /lamp/ls.log

批量添加指定数量的用户

#!/bin/bash
read -p "user name:" -t 30 name
read -p "number of users:" -t 30 num
read -p "passwd of users:" -t 30 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=1;i<=$num;$i++ ))
                    do
                        /usr/sbin/useradd $name$i &> /dev/null
                        echo $pass | /usr/bin/passwd --stdin $name$i &> /dev/null 
                    done
        fi
fi

while until

while [ 条件 ]
    do
        程序
    done



----------


until [ 条件 ]
    do
        程序
    done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值