Linux-Shell编程

Posted mrfo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-Shell编程相关的知识,希望对你有一定的参考价值。

Shell基础编程

一、find \ grep \ sed \ awk \ cut \ sort \ case \ select 语法

find语法
 
# -name 按文件名查找 -type f代表文件 d代表目录
$ find 查找路径 [-name/-type] 文件名/*.文件类型

  

find扩展用法
#只查找指定目录的一级目录 当前目录用"."代替
$ find 查找路径 -maxdepth 1 [-name/-type] 文件名/*.文件类型
#查找文件大于N兆的文件(N代表文件大小)
$ find 查找路径 -size +N
#查找一天内修改过的文件
$ find 查找路径 [-name/-type] 文件名/*.文件类型 -mtime -1
#查找n天前修改过的文件(n代表天数)
$ find 查找路径 [-name/-type] 文件名/*.文件类型 -mtime +n
#将查找到的文件删除或拷贝用 -exec  (大括号表示查找到的内容) 
$ find 查找路径 [-name/-type] 文件名/*.文件类型 -exec rm -rf {} $ find 查找路径 [-name/-type] 文件名/*.文件类型 -exec cp {} /目标路径/ 

  

grep基本用法
#基本语法
$ grep "匹配内容" 文件名
#正则匹配("^字符"表示以该字符开头 "字符$"表示以该字符结尾)
$ grep "^字符" 文件名
$ grep "字符$" 文件名
#排除匹配内容(-v 表示不显示包含该字符的内容)
$ grep -v "字符"
#匹配数字
$ grep "[0-9]" 文件名
#匹配字母
$ grep "[a-z]" 文件名
$ grep "[A-Z]" 文件名
#多级匹配 -E 表示egrep,是grep的扩展 例:匹配IP地址
$ grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"
#满足两个条件其中一个都取出来
$ egrep "条件1 | 条件2" 文件名

  

sed用法
#替换文件内容语法 加"-i"会修改原文件 不加则只输出临时结果不修改原文件
$ sed -i ‘s/原内容/新内容/g‘ 文件名
#在每行首添加内容
$ sed ‘s/^/&要加添的内容/g‘ 文件名
#在每行尾添加内容
$ sed ‘s/$/&要添加的内容/g‘ 文件名
#输出包含匹配内容的那一行 p
$ sed -n ‘/匹配内容/P‘ 文件名
#在匹配内容行的上一行添加内容 i
$ sed ‘/匹配内容/i 添加内容/‘ 文件名
#在匹配内容行的下一行添加内容 a
$ sed ‘/匹配内容/a 添加内容/‘ 文件名
#输出第一行
$ sed -n ‘1P‘ 文件名
#输出最后一行
$ sed -n ‘$P‘ 文件名

  

awk用法
#取出第n列的内容 $n
$ cat 文件名 |awk ‘{print $n}‘
#取出最后一列的内容 $NF
$ cat 文件名 |awk ‘{print $NF}‘
#指定分隔符 -F分隔符
$ cat 文件名 |awk -F: ‘{print $n}‘
#在结果中加入自定义内容 print后用""号包起来
$ cat 文件名 |awk ‘{print "hello"$n}‘

  

cut用法
语法格式
$ cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]
?
使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
?
主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f  :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

 

sort用法
#倒序
$ cat 文件名 |sort -nr

  

case语法
case 变量名 in
    参数1 )
        执行A语句...
    ;;
    参数2 )
        执行B语句...
    ;;
    ...
esac

  

select命令交互
PS3="请输入对应选项编号: "
select 变量名 in "选项1" "选项2" "选项3" "exit"
do
    #执行语句(一般配合case语句)执行交互
    case 变量名 in
        选项1 )
            执行A语句...
        ;;
        选项2 )
            执行B语句...
        ;;
        选项3 )
            执行c语句...
        ;;
        exit )
            执行exit退出命令!
        ;;
    esac
done

  

二、循环控制

#for循环
for 变量名 in 取值范围
do 
    执行语句...
done 
#例:循环输出1-10的整数
for i in seq 10
do 
    echo "This Number=$i"
done
#while循环
while [ 条件表达式 ]
do
    条件成立时执行语句...
done
#例:同上
i=0;
while [ $i -gt 10 ]
do 
    ((i++))
    echo "This Number=$i"
done
#while从文件中按行读取内容 read 
while read line
do 
    echo $line  
done < 文件名 
#另一种写法
cat 文件名 | while read line
do {
        echo $line
   }
done

 

三、if分支语句

#if条件判断
    -eq:等于
    -ne:不等于
    -le:小于等于
    -ge:大于等于
    -lt:小于
    -gt:大于
    -r file   用户可读为真 
    -w file   用户可写为真 
    -x file   用户可执行为真 
    -f file   文件为正规文件为真 
    -d file   文件为目录为真 
    -c file   文件为字符特殊文件为真 
    -b file   文件为块特殊文件为真 
    -s file   文件大小非0时为真 
    -t file   当文件描述符(默认为1)指定的设备为终端时为真
    -a        与 
    -o       或 
    !        非
    
    -z 判断 变量的值,是否为空; zero = 0
       - 变量的值,为空,返回0,为true
       - 变量的值,非空,返回1,为false
    -n 判断变量的值,是否为空   name = 名字
       - 变量的值,为空,返回1,为false
       - 变量的值,非空,返回0,为true
       
    [ -n "$pid" ]   单对中括号,变量必须要加双引号
    [[ -z  $pid ]]  双对中括号,变量不用加双引号
    
    ()      子shell中执行
    (())    数值比较,运算 C语言
    $()     命令替换
    $(())   整数运算
    {}      集合
    ${}     变量引用 
    []      条件测试
    [[]]    条件测试,支持正则表达式 =~
    $[]     整数运算  例:求2的10次方 echo $[2**10]
     
#基本语法 
if [ 条件表达式 ];then
    条件成立执行语句...
else
    条件不成立执行语句...
fi
#多重判断
if [ 条件表达式1 ];then
    执行语句...
elif [ 条件表达式2 ];then
    执行语句...
else
    执行语句...
fi  
#扩展 执行语句中间用&&符号表示前面一名执行成功才执行后面一句 一般可用于代替if多重判断
$ 执行语句A && 执行语句B    

 

四、变量引用

$? 表示上一条命令的退出状态, 结果为0表示上条命令执行成功
$$ 表示当前shell的进程ID
$# 表示参数个数
$* 表示所有参数
[email protected] 一般用于数组,表示所有元素
$0 表示传入脚本的第一个参数
$n 表示传入脚本的第n个参数
#正则表达式 判断是否是数字 "^"表示以什么开头  "+"表示它前面的字符可以有1到多个 "$"表示以什么结尾
$ ^[0-9]+$ 

 

五、全量备份与增量备份

全量备份
$ tar -g 路径/快照名 -czvf 路径/压缩后的文件名.tar.gz 路径/备份的目标文件或目录

  

增量备份
$ tar -g 路径/原快照名 -czvf 路径/压缩后的文件名.tar.gz 路径/备份的目标文件或目录

  

六、Linux命令取别名

#查看当前shell别名
$ alias
#取消别名
$ unalias 命令
#定义临时别名
$ alias 别名=‘命令 参数‘
#例:定义个临时别名
$ alias abc=‘ls -l‘

  

 

 

以上是关于Linux-Shell编程的主要内容,如果未能解决你的问题,请参考以下文章

Linux-Shell编程

linux-shell脚本编程(进阶)

Linux-Shell脚本编程进阶

Linux-shell编程

linux-shell编程基础

Linux-shell编程入门