zoukankan      html  css  js  c++  java
  • 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 %s %s ' $(cat student.txt)

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

    awk

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

    awk 'BEGIN{print "welcome!!!"}{print $2"	"$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"
    "}'
    
    #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
    
    
  • 相关阅读:
    zz学习技术的三部曲:WHAT、HOW、WHY
    zz一种理想的在关系数据库中存储树型结构数据的方法
    某外企SQL Server面試題
    C语言中的指针 &与*
    剖析SQL Server执行计划(zz)
    UNICODE,GBK,UTF8区别
    (Part 1Chapter 14) High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI
    关于GtkTreeView和 MVC的一篇好文章 入木三分
    一个混合 MPI_Init() 和 gtk_init() 的实例序
    (Part 2Chapter 57) High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI
  • 原文地址:https://www.cnblogs.com/onegoal/p/7244828.html
Copyright © 2011-2022 走看看