shell基础

(1)shell脚本:一个可执行并实现某种预设功能的文本文件;

(2)作用:命令集合起来,批量地去执行

(3)脚本的规范:

①脚本文件命名:自定义名称.sh(shell脚本) 

②脚本的三要素:

第一,声明环境:#!/bin/bash

第二,必要的注释:作者信息(姓名,练习方式),代码结构与重要代码的解释

第三,可执行代码(命令+逻辑结构)

③测试脚本

办法1:chmod +x /路径/脚本.sh

            /路径/脚本.sh(./脚本.sh)

作用: 作用:打开一个子shell来读取并执行FileName中命令。

注:运行一个shell脚本时会启动另一个命令解释器.

        每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

        这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

        shell脚本也可以启动他自已的子进程.

        这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

办法2:

1)source 脚本.sh

作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

注:该命令通常用命令“.”来替代。 如:source .bash_profile   . .bash_profile两者等效。

       source(或点)命令通常用于重新执行刚修改的初始化文档。

       source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)。

2)sh     脚本.sh                 ##可用 2>>叫错误的信息写入到一个文件中

   bash 脚本.sh

作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

注:两者在执行文件时的不同,是分别用自己的shell来跑文件。

    sh使用“-n”选项进行shell脚本的语法检查,使用“-x”选项实现shell脚本逐条语句的跟踪,"  

shell脚本编码常用工具

(1)管道符:将管道前面执行的结果交由后面的命令进行二次处理

(2)输出重定向(>覆盖 >>追加)

>:只收集正确输出

2>:只收集错误输出

&:收集正确输出与错误输出

黑洞设备:/dev/null        ##粉粹输出结果

>&2:把echo出来的信息重定向为一个报错信息(在执行脚本的时候,可以通过2>/dev/null,将重定向到报错信息中)

(3)echo “内容”:将结果输出到屏幕上

     echo “内容“ >> 文件 :将内容写入到文件中

linux三剑客:

(一sed

sed是一种非交互式的编辑器

选项:

-i:直接修改文件内容

格式:

i:插入 例如:sed -i "3i huangxiaoliang" file

d:删除指定行 例如:sed -i "1d" file

a:新增   例如:sed -i "5a abc" file

s:搜索替换  格式:sed -i 's/被替换的内容/替换后的内容/g' 文件

拓展:vim编辑器

vim:文本编辑器

三种基本模式:命令行模式、编辑模式、末行模式

命令行模式的快捷键:

ctl+b/ctl+f:上下翻页

gg/G:跳到首/尾行

(二zgrep/grep

grep:查找文件内容

格式:grep 内容 文件名

选项:

-i:忽略大小写

-v: 反选

-e:多选项查找

-E: 使用扩展正则表达式,而不是基本正则表达式,在使用-E选项时,相当于使用egrep

满足其中之一即匹配

# grep -E word1|word2|word3’  file.txt

与:都满足才匹配

# grep word1 file.txt | grep word2 | grep word3

根据内容来查找文件:

-r:递归显示目录下所有符合内容的文件

-o:只显示匹配的部分,而不是字符所在的一整

-n(number):显示(结果所在的)行数

-C:查找匹配行前后行的内容

zgrep

zgrep: 查看压缩文件的内容

# zgrep  --binary-files=text  '匹配的字串'  *.tar.gz

(三awk

awk: 行处理器,依次对文件的每一行进行处理

选项:

-F:指定分隔符

格式:awk -F分隔符 ‘{print $n}’ 文件名

awk除了对文件的操作之外,还可以通过管道对输出结果进行处理:

从a,b,c,d中输出c,指定逗号为分隔符

echo "a,b,c,d" | awk -F, '{print $3}'

关键字:

BEGIN:提供运行脚本前的一些操作

END:提供运行后的一些操作

 

 以不变的名称存放可以变化的值:

(1)shell脚本总定义变量并赋值:变量名=变量值

1)变量的命名规范:只能由字母,数字,下划线组成;严格区分大小写,不能以数字开头

2)=是一个赋值号

3)赋予的可以是字符串,有空格的需要用‘’括起来

   将命令的输出结果作为参数:$(命令)或‘命令’        ##例如:a=$(find /home/ -user student -type f) 这种不推荐使用  ;a=’ find /home/ -user student -type f’

   整数运算$[+-*/%] :运算的对象只能是整数;运算的结果/向下取整,%取余数   ##这种只有运算的时候才会用到,不怎么用到,仅做了解

(2)shell脚本引用变量:$变量名或者${变量名}       ##${变量名}可以与其他内容组合,比如$LANG想要与2结合,可以${LANG}2

1)查看变量值:echo $变量名或者${变量名}

变量的种类

(1)自定义变量:用户自主设置,修改及使用

1)直接在脚本中定义

2)read -p ‘提示信息变量名                  以交互式的形式从键盘获取变量的值存储到变量名

(2)环境变量:由系统定义并赋值,用户可以直接调用

常见的环境变量:$USER,$LANG,$PAHT,$HOME

1)$USER:表示的是当前用户名

2)$LANG:系统语言

3)$HOME:表示当前用户的家目录

4)$PATH: 代表执行命令的搜索路径

(3)位置变量:由系统定义并赋值,用户直接调用即可

作用:执行脚本时,可以用来作为参数

表示${n} (n为序号)代表执行脚本时的第n个参数

示例:$1,$2,$3…..${10},${11}

(4)预定义变量:由系统定义并赋值,用户直接调用即可

1) $#:(已加载的)位置变量的个数,求和

2)$*:所有位置变量的值

3$?:程序或脚本退出后的状态值,默认为0,代

判断结构

条件测试:[条件测试表达式]

(1)括号的每个部分都需要有空格隔开

(2)

1)检查及判断文件状态

-e:文档存在为真

-d:是目录且存在为真

-f:是文件且且存在为真

-r:存在文档且有读权限为真

-w:存在文档且读权限为真

-x:存在文档且有执行权限为真

2)比较大小,不可以比较分数(小数)否则报错

-eq   等于

-en   不等于

-gt    大于

-ge    大于或等于

-lt     小于

-le    小于或等于

备:每个单词的首字母

e或eq:equal   等于

n:no           

t:than         

g:great        

l:less          

3字符串对比  

==:字符串相同为真

!=:  字符串相同

4)在条件表达式加!代表取反

例如:[ ! haha == xixi ]

选择判断

(1)没有结构的选择判断:

1)&&:如果&&前面的判断成立或命令执行成功,则执行&&后面的命令

2)||:仅当||前面的判断不成立或命令执行失败,才执行||后面的命令

(2)逻辑结构:if判断

1)if双分支处理

   if  [条件测试表达式];then

        命令序列1

   else  

        命令序列2

   fi

2)if多分支处理

if  [条件测试表达式];then

     命令序列1

elif [条件测试表达式];then

     命令序列2

else

     命令序列2

fi

备:退出脚本,一般是通过条件判断不符合条件报错后退出    ##特殊用法:exit值,可以定义$?的返回值

3循环结构

第一种结构:

for 变量名 in  值列表

do

命令序列

     done

1)作用:

for循环的运作方式,是串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。

其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

2)原理图:

第二种结构:

行1: while 条件测试

行2: do

行3:   执行命令

行4: done

说明:

行1,首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环,介绍while 命令

行3,执行命令区域,这些命令中,应该要有改变条件测试的命令,这样,才有机会在有限步骤后结束执行while循环(除非想要执行无穷循环)。

行4,回到行1,执行while命令

第三种结构:

until循环的语法:

行1,如果条件测试结果为假(传回值不为0),就进入循环。

行3,执行命令区域。这些命令中,应该有改变条件测试的命令,这样子,才有机会在有限步骤后结束执行until 循环(除非你想要执行无穷循环)。

行4,回到行1,执行until命令。

(1)作用:while循环的条件测试是测真值,until循环则是测假值。

(2)原理流程图:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值