shell脚本命令

在平时的运维工作中,今天写一篇shell脚本入门,我们经常会碰到这样一个场景:

执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!

这个时候,就可以使用EOF结合cat命令行进行内容的追加了。

小编现在就是当运维的,你有什么不懂欢迎留言。

下面就对EOF的用法进行梳理:

EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.

EOF一般会配合cat能够多行文本输出.

其用法如下:

<

EOF //结束

还可以自定义,比如自定义:

<

BBB //结束

1、shell简介

shell脚本入门
什么是shell

shell是一个命令解释器,是一个程序/bin/bash,解释linux的命令

shell交互式命令使用

打开终端,一行行敲命令

shell脚本

一系列的命令组成的文件,结合shell语法

shell脚本注释

1、单行注释 #

2、多行注释

:<< 字符 。。。。。。

字符

:<< b 。。。。。。

。。。。。。

b

2、脚本执行方式

bash /path/to/script-name 或 /bin/bash /path/to/script-name (强烈推荐使用)

/path/to/script-name 或 ./script-name (当前路径下执行脚本)

source script-name 或 . script-name (注意“.“点号)

3、变量

本地变量

方式一: name=wang

变量名=变量值

重点:

变量值必须是一个整体,中间没有特殊字符

方式二:name=‘wang’

变量名=‘变量值’

重点:

我看到的内容,我就输出什么内容

方式三:name=“wang”

变量名=“变量值”

区别:

myname=‘is $name’ 不会解析变量

myname=“is $name” 会解析变量

(重点)shell执行环境

开一个终端是一个shell环境

bash运行一个shell脚本,会在新的shell环境执行

source 执行脚本时,不会新开shell环境

能与当前终端共享shell环境

(重点)命令变量

1、 name=ls

2、 name=$(pwd)

注意:把命令执行的结果赋值给变量

全局变量

1、name=wang

export name

2、export name=wang

如果想让变量在任何终端都能使用,修改文件

vi ~/.bashrc

追加export name=wang

source ~/.bashrc

重启操作系统

变量查看

“${变量名}”

场景:

标准使用方式

取消变量

unset 变量名

4、内置变量(重点)

$0 获取当前执行的shell脚本文件名

n 获 取 当 前 执 行 的 s h e l l 脚 本 的 第 n 个 参 数 值 , n = 1..9 , 当 n 为 0 时 表 示 脚 本 的 文 件 名 , 如 果 n 大 于 9 就 要 用 大 括 号 括 起 来 n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大 括号括起来 nshellnn=1..9n0n9{10}

$# 获取当前shell命令行中参数的总个数

$? 获取执行上一个指令的返回值(0为成功,非0为失败)

如果执行的是一个脚本

bash hh.sh

$?返回的是hh.sh中最后一条命令的结果

字符串精确截取

格式:${变量名:起始位置:截取长度}

示例:

${file:0:5} 从第1个字符开始,截取5个字符

${file:5:5} 从第6个字符开始,截取5个字符

${file:0-6:3} 从倒数第6个字符开始,截取之后的3个字符

默认值

${name:-默认值}

name=’’

${name:-hh} 返回 hh

name=‘wang’

${name:-hh} 返回 wang

${name+默认值}

name=’’

${name+hh} 返回 hh

name=‘wang’

${name+hh} 返回 hh

5、测试语句(重点)

1、test 1 = 2

2、[ 1 = 2 ]

注意:=左右必须有空格,[]左右必须有空格

使用echo $? 返回0代表成功,1代表失败

6、条件表达式(重点)

命令1 && 命令2

如果命令1执行成功,那么我才执行命令2 – 夫唱妇随

如果命令1执行失败,那么命令2也不执行

命令1 || 命令2

如果命令1执行成功,那么命令2不执行 – 对着干

如果命令1执行失败,那么命令2执行

[ -f hello.sh ] 判断是否是文件

[ -d hello.sh ] 判断是否是文件夹

[ -x hello.sh ] 判断是否可执行

[ -x hello.sh ] && [ -f hello.sh ] 判断是否是可执行文件

数值比较

n1 -eq n2 相等

n1 -gt n2 大于

n1 -lt n2 小于

n1 -ne n2 不等于

字符串比较

str1 == str2 str1和str2字符串内容一致

str1 != str2 str1和str2字符串内容不一致,!表示相反的意思

数值计算

1、$((a+b))

2、let a=$a+1

7、符号

重定向

命令 > 文件

把命令执行的结果中正确的信息放到文件中

任何命令执行右两种结果,1代表正确,2代表错误

bash hh.sh >/dev/null 2>&1 &

前面&符号代表引用,后面&符号代表后台运行

linux 四剑客

grep 查找文件内容

grep -nr hello .

find 根据关键字查找文件

find . -name ‘*sh’

sed 行编辑工具,以行为单位

替换

sed -i “2s#查找的内容#替换的内容#1” sed.txt

查找第二行,只改找到的第一个值

sed -i “s#查找的内容#替换的内容#g” sed.txt

s前不指定行是处理所有行,列写g代表处理所有列

插入

sed -i “1i\hello” sed.txt

在第1行前插入一行

追加

sed -i “1,3a\hello” sed.txt

在第1,2,3行后面都添加一行

删除

sed -i “3d” sed.txt

删除第三行

awk 分析工具,按行处理

默认把数据按照空格或tab,拆分数据

awk ‘NR==1 {print $1,$2}’ awk.txt

NR==1 代表只处理第一行

awk -F ‘:’ ‘{print NF}’ awk2.txt

-F ‘:’ 代表把数据按照:拆分

awk ‘BEGIN{FS=":";OFS="—"} {print $1,$7}’ awk2.txt

FS代表输入的数据按照什么拆分,OFS代表输出的内容的分隔符

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值