if 里的 -e -d -f 是什么意思;fi

文件表达式
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

整数变量表达式
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2,则为真
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2,则为真       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空,则为真
if  [ $sting ]                  如果string 非空,返回0 (和-n类似) 

    逻辑非 !                   条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ]               如果不存在目录$num

    逻辑与 –a                   条件表达式的并列
if [ 表达式1  –a  表达式2 ]

    逻辑或 -o                   条件表达式的或
if [ 表达式1  –o 表达式2 ]

Shell脚本语法-- if/then/elif/else/fi  

和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命

 
令组成的,例如先前讲过的
 
if [ -f ~/.bashrc ]; then 
    . ~/.bashrc 
fi 
其实是三条命令,if [ -f ~/.bashrc ]是第一条,then . ~/.bashrc是第二条,fi是第三条。如果两条命令写在同一行则需要用;
 
号隔开,一行只写一条命令就不需要写;号了,另外,then后面有换行,但这条命令没写完,Shell会自动续行,把下一行接在then
 
后面当作一条命令处理。和[命令一样,要注意命令和各参数之间必须用空格隔开。

if命令的参数组成一条子命令,如果该子命令的Exit Status为0(表示真),则执行then后面的子命令,如果Exit Status非0(表示假),则执行elif、else或者fi后面的子命
 
令。if后面的子命令通常是测试命令,但也可以是其它命令。Shell脚本没有{}括号,所以用fi表示if语句块的结束。见下例:
 
#! /bin/sh 
 
if [ -f /bin/bas 
then echo "/bin/bash is a file" 
else echo "/bin/bash is NOT a file" 
fi 
 
 
if :; then echo "always true"; fi 
:是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。此外,也可以执行/bin/true或/bin/false得到真
或假的Exit Status。

jobs

jobs -l 选项可显示所有任务的PID

linux后台运行和关闭、查看后台任务

输出文本中的指定行

Linux Shell输出文本中的指定行_lvley的博客-CSDN博客_shell输出指定行

压缩与解压缩

linux下解压命令大全

grep

1、或操作

grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename    // 用egrep同样可以实现
awk '/123|abc/' filename   // awk 的实现方式

2、与操作
grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行

3、其他操作
grep -i pattern files   //不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files   //只列出匹配的文件名,
grep -L pattern files   //列出不匹配的文件名,
grep -w pattern files  //只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分别显示[number]行,

字符串替换

[liusiyi@localhost ~]$ echo $a
-rw-r----- 3 hduser302 hduser302 3336 2019-07-12 17:35 /apps/hduser302/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties
 
#用变量替换${a//}做字符串替换
[liusiyi@localhost ~]$ echo ${a/hduser302/hdpusr400}   #变量a中的第一个匹配的字符串会被替换
-rw-r----- 3 hdpusr400 hduser302 3336 2019-07-12 17:35 /apps/hduser302/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties
[liusiyi@localhost ~]$ echo ${a//hduser302/hdpusr400}  #变量a中所有匹配的字符串都会被替换
-rw-r----- 3 hdpusr400 hdpusr400 3336 2019-07-12 17:35 /apps/hdpusr400/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties
 
#用sed做字符串替换
[liusiyi@localhost ~]$ echo $a | sed 's/hduser302/hdpusr400/'   #sed 's///' 用来替换第一个匹配的字符串
-rw-r----- 3 hdpusr400 hduser302 3336 2019-07-12 17:35 /apps/hduser302/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties
[liusiyi@localhost ~]$ echo $a | sed 's/hduser302/hdpusr400/g'   #sed 's///g'用来替换所有匹配的字符串
-rw-r----- 3 hdpusr400 hdpusr400 3336 2019-07-12 17:35 /apps/hdpusr400/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties
 
#用awk做字符串替换 (这个例子中用sub或gsub都可以,默认是空格为分隔符)
[liusiyi@localhost ~]$ echo $a | awk '{gsub(/hduser302/,"hdpusr400",$3);print $0}' #指定替换第一个
-rw-r----- 3 hdpusr400 hduser302 3336 2019-07-12 17:35 /apps/hduser302/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties
[liusiyi@localhost ~]$ echo $a | awk '{gsub(/hduser302/,"hdpusr400");print $0}'   #全部替换
-rw-r----- 3 hdpusr400 hdpusr400 3336 2019-07-12 17:35 /apps/hdpusr400/student/properties/xxyy/IMP_00004_XXYY_USE_PERSONALINFO.properties

sed用法

多个匹配

【Shell】sed 同时匹配多个模式_媛测的博客-CSDN博客_sed 匹配多个