linux 小技巧总结
(1)linux判断文件是否存在
if [ -f filename]; then
。。。。。。#要执行的语句
fi
具体例子:
file=/usr/local/oracle/oradata/archived_log/file.txt
if [ -f $file ];then #判断文件是否存在,存在就追加
echo $file_i >> $file
else #否则复写
echo $file_i > $file
fi
fi
(2)按行读取文件
record=/usr/local/oracle/oradata/archived_log/recordarch
file=/usr/local/oracle/oradata/archived_log/file.txt
for file_i in `cat $record`;
do
echo $file_i
scp -C $file_i aaa@192.168.1.106:/d:/redo
flag=$(echo $?) #判断SCP是否发送成功,成功返回0
if [ $flag -eq 0 ];then
#rm $file_i
sed -i '/'''$file_i'''/d' $record
echo "success delete $file_i"
if [ -f $file ];then #判断文件是否存在,存在就追加
echo $file_i >> $file
else #否则复写
echo $file_i > $file
fi
fi
done
(3)从一个文件夹读取文件
#!/bin/bash
#coding=utf8
record=/usr/local/oracle/oradata/archived_log/recordarch
cd /usr/local/oracle/archive/
for file_i in `find ./ -mmin -1|grep 'dbf'`; #在当前目录下查找包含dbf的在一分钟内生成的文件
do
#cp $file_i /usr/local/oracle/oradata/archived_log
file_changed=$(echo $file_i |awk -F '/' '{print $2}') #去掉./ awk用法
echo $file_changed
echo $file_changed >> $record
done
(4)cut和awk用法,字符串分隔方法。
start_s=$(echo $start | cut -d '.' -f 1) #以,分割,-f指打印,1指分割后的第一部分
time2=$(echo "$time" | awk '{print $1/1000.0}')
str1=echo $string | cut -d ' ' -f1 #将输入的字符串根据空格分割,取第一个字段(field)
可以打印动态的位置方法:
for((i=1;i<=7;i++))
do
echo $user|cut -d ":" -f$i
done
将以:分隔的字符串分别输出,这种方法不需要知道个数。
- #!/bin/bash
- user=’mark:x:0:0:this is a test user:/var/mark:nologin’
- i=1
- while((1==1))
- do
- split=`echo $user|cut -d ":" -f$i`
- if [ "$split" != "" ]
- then
- ((i++))
- echo $split
- else
- break
- fi
- done
问题:对于’1,2,3,4,5’这样的字符串输出采用,分隔开的1 2 3 4 5
特征:在字符串中没有空格
解决方法1:
- #!/bin/bash
- var=’1,2,3,4,5’
- var=${var//,/ } #这里是将var中的,替换为空格
- for element in $var
- do
- echo $element
- done
(5) 按行读取和按行删除文件
写法一:
----------------------------------------------------------------------------
#!/bin/bash
while read line
do
echo $line
done < filename(待读取的文件)
----------------------------------------------------------------------------
写法二:
----------------------------------------------------------------------------
#!/bin/bash
cat filename(待读取的文件) | while read line
do
echo $line
done
----------------------------------------------------------------------------
写法三:
----------------------------------------------------------------------------
for line in `cat filename(待读取的文件)`
do
echo $line
done
----------------------------------------------------------------------------
说明:
for逐行读和while逐行读是有区别的,如:
$ cat file
1111
2222
3333 4444 555
$ cat file | while read line; do echo $line; done
1111
2222
3333 4444 555
$ for line in $(<file); do echo $line; done
1111
2222
3333
4444
555
shell删除某一行
如果有一个abc.txt文件,内容是:
aaa
bbb
ccc
ddd
eee
fff
如果要删除aaa,那么脚本可以这样写:
sed -i '/aaa/d' abc.txt
如果删除的是一个变量的值,假如变量是var,应该写成:
sed -i '/'"$var"'/d' abc.txt 注意这里是三个'''
至于grep -v aaa abc.txt这个方法,是无法将修改的结果写入abc.txt中去的
(6) 判断一个文件是否存在(重复了,上面有啦)
if [ -f "filename" ];then #这里的filename可以加上路径
...
fi
将一个文件追加到另一个文件
cat file1 >> file2 #>>追加,>为覆盖
补充例子:
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi
#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi
#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi
#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi
#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
========================================
shell 判断语句
流程控制 "if" 表达式 如果条件为真则执行then后面的部分: if ....; then
....
elif ....; then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等… 通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等 -r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
######################################################### 含条件选择的shell脚本
对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包
括比较运算、判断文件是否存在等。基本的if条件命令选项有: -eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在
几
乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。
##################################################################
判断文件是否存在 #!/bin/sh
today=`date -d yesterday +%y%m%d`
file="apache_$today.tar.gz"
cd /home/chenshuo/shell
if [ -f "$file" ];then
echo "OK"
else
echo "error $file" >error.log
mail -s "fail backup from test" <error.log
fi
linux 小技巧总结的更多相关文章
- linux 小技巧(查找替换文件中的ascii编码字符)
这里纪录一些linux下用到的小技巧,以免遗忘 在linux中经常碰见各种文件处理.最常用的就是替换文件中的某些字符.常见字符替换还是很容易完成.但是有些不可见字符以及ascii编码字符等等都无法直接 ...
- linux 小技巧(磁盘空间搜索)
这里记录一些linux 管理中可能会用到的又容易忘的一些小技巧. linux磁盘写入失败,提示磁盘空间不足.一般都会用df -h 或者df -i看是不是磁盘空间不足或者是inode空间不足.发生这种情 ...
- Linux小技巧scp命令
Linux服务器运维小技巧scp命令详细教程. 前言 今天给大家带来的是linux中比较实用的命令scp.善用小技巧,解决工作中的痛点. 掌握一门好的技术或者说一门好的艺术,最快捷的方式就是融入到工作 ...
- linux 小技巧
http://blog.csdn.net/xianjie0318/article/details/75712990 1.按内存从大到小排列进程: ps -eo "%C : %p : % ...
- 10 个提升效率的Linux小技巧
您是否曾经惊讶于看到某人在 UNIX 中非常快速地工作,触发命令并快速地执行操作?是的,我碰到过几次,并且我一直都在向那些超级巨星开发者学习.在本文中,我想分享一些 UNIX 命令实践,这些实践是我在 ...
- Linux小技巧总结
1.fdisk创建磁盘分区不重启系统partprobe 使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs磁盘分区则需要重启系统才能够读取到/dev/sda*,而使用partprobe则可以使 ...
- [Linux 小技巧] Ubuntu 14.04 下编译、安装、配置最新开发版 GoldenDict
1. 背景介绍 GoldenDict 是一款非常优秀的跨平台电子词典软件,支持 StarDict.Babylon 等多种词典.其 PC 版基于 Qt 编写,完全免费.开源且没有广告.GoldenDic ...
- linux小技巧
主机禁止ping: 修改/proc/sys/net/ipv4/icmp_echo_ignore_all 值为1 默认是0 echo '1' > /proc/sys/net/ipv4/icmp_e ...
- Linux小技巧1:如何关闭Root用户SSH登陆
新建用户 >useradd nonroot //新建用户 >passwd nonroot //创建/修改nonroot用户密码 >vim /etc/ssh/sshd_config 将 ...
随机推荐
- Sublime Text 3 代码格式化插件推荐 CodeFormatter
CodeFormatter CodeFormatter has support for the following languages: * PHP - By PHP_Beautifier* Java ...
- MIT 2012分布式课程基础源码解析一-源码概述
课程主页 课程介绍:本课程会在给出的源码的基础上要求完成8个lab Lab overviewLab 1 - Lock ServerLab 2 - Basic File ServerLab 3 - MK ...
- hdu 1427 dfs
速算24点 题意:随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/'运算符以及括号改变运算 顺序,使得最终 ...
- ExtJs Ext.panel.Panel和Ext.container.Viewport布局问题
Ext.container.Viewport Ext.panel.Panel Viewport 它的布局会占用整个 body,也应该是这样,它会随着浏览器的高度和宽度的变化而变化. Panel 布局时 ...
- Collection和Collections的区别
Collection 是集合类的上级接口,继承它的接口主要有set和list.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索,排序,线程安全化等操作.
- Uva 654 Ratio
题意: 给两个数, n, m 构造一个序列, 分母从1 ~ m, 并且j / i越来越接近n/m. 思路: 如果存在 j / i 趋近于 n / m 那么则有 j = n * i / m + 0.5( ...
- cmd命令查看端口和进程信息
在我们进行WEB开发时,往往会遇到socket连接到服务器出现无法响应的问题,归根结底就是网络通讯问题,或者端口未开启的问题,下面总结了一下找出原因的方法 1 看与服务器的连接:ping ip地址
- 异步IO模型和Overlapped结构
.NET中的 Overlapped 类 异步IO模型和Overlapped结构(http://blog.itpub.net/25897606/viewspace-705867/) 数据结构 OVERL ...
- mysql function 与 procedure
Mysql 的 function 和 procedure 有啥区别呢 ? 网上搜索后说 function 有返回值, procedure 无返回值. 1.return 从function 的语法角度 ...
- Centos 6.4上面用Shell脚本一键安装mysql 5.6.15
Centos 6.4上面用Shell脚本一键安装mysql 5.6.15 #!/bin/bash if [ `uname -m` == "x86_64" ];then machi ...