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
终端欢迎信息
本地终端欢迎信息:/etc/issue
远程终端欢迎信息:/etc/issue.net
转义符在该文件中并不生效
要显示次欢迎信息需要在ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”。登录后的欢迎信息:/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
Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本的更多相关文章
- Linux学习11-CentOS如何设置java环境变量
前言 之前用yum安装的java,现在想添加环境变量,yum安装的java路径在哪呢?如何找到安装的路径,把jdk添加到环境变量. 本篇详细讲解linux系统设置java环境变量 找到jdk路径 之前 ...
- linux下查看和添加PATH环境变量
linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PA ...
- Linux下jdk的安装和环境变量的配置
Linux下jdk的安装和环境变量的配置 一.jdk的下载 方式一:在官网下载 http://www.oracle.com/technetwork/java/javase/downloads/inde ...
- windows+linux下jdk安装及java环境变量配置
对于初学java的用户来说,可能第一件要做的事情就是安装jdk及配置环境,以下内容主要讲述windows及linux下jdk的安装以及环境变量的配置. 1.首先下载相应平台可用版本jdk安装文件,可以 ...
- MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析
MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析 Yao.GUET@2014-05-19 一.故事起因 由于文件系统的增大,已经大大的超出了8MB的NOR FL ...
- Laravel 学习 .env文件 getenv 获得环境变量的值
Laravel 学习 .env文件 getenv 获得环境变量的值 我们还需要对应用的 .env 文件进行设置,为应用指定数据库名称 sample. .env . . . DB_DATABASE=s ...
- linux把程序添加到全局环境变量
比如把, nginx服务放到全局变量 ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/ /usr/local/bin/就是环境变量目录
- Linux学习之十一、环境变量的功能
环境变量的功能 可以利用两个命令来查阅,分别是 env 与 export 呢! 范例一:列出目前的 shell 环境下的所有环境变量与其内容. [root@www ~]# env SHELL 告知我们 ...
- linux centos中添加删除修改环境变量,设置java环境变量
前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...
随机推荐
- leetcode-easy-others-20 Valid Parentheses
mycode 95.76% class Solution(object): def isValid(self, s): """ :type s: str :rtype ...
- 新建一个浏览器APP
安卓开发环境准备好了,试试新建一个浏览器程序吧 1.Start a new Android Studio Project 2.选这个像微信一样的样式 3.选择语言和版本 4.等待创建完成,拖一个Web ...
- Prism学习笔记-模块之间通信的几种方式
在开发大型复杂系统时,我们通常会按功能将系统分成很多模块,这样模块就可以独立的并行开发.测试.部署.修改.使用Prism框架设计表现层时,我们也会遵循这个原则,按功能相关性将界面划分为多个模块,每个模 ...
- dcef3 基本使用经验总结
dcef3 基本使用经验总结 https://www.cnblogs.com/h2285409/p/10517483.html 加载命令启动参数 --enable-system-flash 会加 ...
- Delphi中的Free和Nil和freeandnil函数
Delphi中的Free和Nil 在Delphi中释放对象资源时一般用Obj.Free(Obj为一个实例名),不过程Delphi中还有一个FreeAndNil(对象名)函数,那么用哪个好呢?Free和 ...
- [转] JavaScript学习:BOM和DOM的区别和关联
BOM 1. BOM是Browser Object Model的缩写,即浏览器对象模型. 2. BOM没有相关标准. 3. BOM的最根本对象是window. 从1可以看出来:BOM和浏览器关系 ...
- springmvc请求参数获取(自动绑定)的几种方法
1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...
- 【HANA系列】SAP HANA的ini文件存储路径
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA的ini文件存储 ...
- java并发编程 线程间协作
线程间协作 1. 等待和通知 等待和通知的标准形式 等待方: 获取对象锁 循环中判断条件是否满足,不调用wait()方法 条件满足执行业务逻辑 通知方: 获取对象所 改变条件 通知所有等待在对象的线程 ...
- eclipse 逆向生成hbm配置文件及pojo
1.eclipse配置hibernate环境 由于在公司中不能在线安装jboss Tools,只能简单介绍手动安装 在jboss官网下载对应自己eclipse的压缩包. 在eclipse 中选择Hel ...