xshell编写文件_xshell编程小结

初步学完shell脚本编程,通过这篇博客对其小结一下

shell定义:shell其实是一个命令解释器,它的作用是解释用户输入的命令和程序

shell脚本:我们可以在文本中输入一系列的命令、控制语句和变量,这一切有机的结合起来就形成了功能强大的shell脚本。

一.基础语法

1.查看系统脚本解释器

0030520448559c8bc1bf5b3915f3f34f.png

常用的是bash解释器

2.使用bash解释器执行脚本的三种方式:

bash xx.sh

sh xx.sh

./xx.sh(注意是否有权限,没有通过chmod 755 xx.sh 或chmod u+x xx.sh 添加权限)

3.shell中的变量

系统变量

$HOME 家目录

$PWD 当前目录

$SHELL 解释器路径

$USER 用户

自定义变量

变量名=变量值注意等号两边没有空格

撤销变量 unset 变量名

静态变量

readonly 变量名=变量值(declare -r 变量名=变量值)

静态变量不能撤销,关机或运行完脚本自动失效

全局变量

变量名=变量值

export 变量名

特殊变量$

$n

n为数字,$0代表该脚本名称,$1-$9代表第一到第九个命令行参数,第十个及以后的参数需要用大括号包含,如${10}

929929784b8c102eb2439249d25a4465.png

$#

获取所有输入参数的个数

$@ 和$*

$@和$*都表示命令行中所有的参数,一般看来没有区别,for循环打印时都是一个个打印,但当用双引号分别将他们括起来,"$@"是分裂的,不是一个整体(for i in "$@"),而“$*”是一个整体

$?

最后一次执行命令的返回状态,如果值为0,证明命令执行正确,非0命令执行不正确

注意:函数中,函数的返回值只能有$?获取,且返回值小于等于255。单独比较大小时,结果也是由$?获取

c18727894b3765867ce54f56b89e586b.png

4.运算符

乘除加减

第一种方式:$((运算式))和$[运算式],运算符之间有没有空格无所谓

第二种方式:`expr 变量1  +-*/% 变量2` 运算符之间有空格 ,要加反引号

8070a9bdf7c874cc906870e5737ad281.png

条件判断

[ condition ] 条件与两端括号之间有空格

大小判断

-lt 小于

-le 小于等于

-ge 大于等于

-gt  大于

-eq  等于

-ne  不等于

文件类型判断

-f  文件存在且是一个常规文件

-e 文件存在

-d 文件存在是一个目录

52ad2a709bf17adeeba733bcfa8bebc6.png

文件权限

-r 有读的权限

-w 有写的权限

-x 有执行的权限

多条件判断

&& 与

|| 或

!逻辑否

5.流程控制

if语句

if [ 条件判断式 ];then

fi

if [ 条件判断式 ]

then

fi

if [ 条件判断式 ]

then

else

fi

if [ 条件判断式 ]

then

elif [ 条件判断式 ]

then

fi

case语句

case $变量名 in

“值1”)

程序

;;

“值2”)

程序

;;

*)

都不是

;;

esac

e43f7902b88ffc7184bab69ba75cadeb.png

for 循环

for ((初始值;条件;;变量变化))

do

程序

done

for 变量 in 值1 值2 值3

do

程序

done

1a174497dc21136e09b84ae41037eb07.png

while 循环

while  [ 条件判断式 ]

do

程序

done

822b458a320192ab6b45f00acb8254b2.png

读取控制台输入

read(选项)(参数) 变量

读取输入赋值给变量

-p  指示读取值时的提示符

-t  指定读取值时等待的时间

read相当于python中的input

read -t 7 -p “enter your choice” NAME

6.函数

系统函数

basename函数截取文件名称

basename [string/pathname]

basename [string/pathname]  [suffix]

basename 会只保存路径的最后一项,只剩文件名

1c72ccf4145b44e4df65f5349f215aee.png

6d47605ebd4319728a77f36503e884e0.png

dirname 函数

dirname函数与basename作用相反,截取内容相反

3b5c26b64aee42316553c6bb7865b141.png

获取执行脚本的路径

pw=$(cd `dirname $0`;pwd)

自定义函数

[function] funcname[()]      function ,()可写可不写

{

程序

[return xx]

}

返回值由$?获取,返回值(0-255)

注意:必须在调用函数地方之前,先声明函数

8e79e49389d346513c63c4bc18c9c072.png

一个脚本使用另一个脚本的函数

.  脚本名

函数名

b9b535d349d6c5da45c611cf84d8919f.png

二.shell工具

1.cut命令

cut 命令从文件的每一行剪切字节,字符等数据,并将符合的数据输出

cut [选项参数] filename

默认分隔符是制表符

参数 -f 提取第几列

-d 分隔符 按照指定分割符分割列

ade7ac52dacd3eebeaed6a06ed286486.png

2.sed

sed是一种流编辑器,它一次处理一行内容把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区中的内容送往屏幕

接着处理下一行,这样不断重复,知道文件末尾,注意文件的内容没有被改变,除非你使用重定向存储输出

sed  [选项参数]   命令 filename

选项参数

-e  有多个命令时使用

-n 只显示处理过的行

命令参数

a 新增

d 删除

s 查找并替换

sed -n '1,/内容/'p 文件    显示第一行到包含匹配内容的那一行

c4a1a311398c3e284cfe6bfa632d2187.png

sed -n 'num'p  文件     显示第num行

d872a265be6b8c5ab59be40fd317c66b.png

sed “na  内容” 文件名                           在n行后加上内容

efaf8c4f03ea2af583f903419ffc4031.png

sed  "s/旧 内容/新内容/g" 文件名          替换,g全局替换,否则只换一个

b3854ad940f5a28f5e231698c7f608d0.png

sed -e "nd" -e  "s/旧内容/新内容/g"  文件名          删掉第n行并替换内容

3.awk

awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符,将每行切开,切开的部分再进行分析处理。

命令格式:

awk [选项参数] 'pattern{action1} pattern {action2}.....' 文件名

pattern 表示awk在数据中查找的内容,就是匹配模式 (/内容/  是匹配格式)

action在找到匹配内容时所执行的一系列命令

c5e320dba2d15981731a7d018093eca0.png

在开始和结束地方加上新的内容

e10efb8ff10a40ca02d324cd616249b2.png

BEGIN 在所有数据读取前执行,END在读取所有数据后执行

awk的内置变量

FILENAME 文件名

NR 已读的记录数(执行到第几行)

NF浏览记录的域的个数(切割后,列的个数)

显示文本空行行数与具体行号

27ac385f2a140443337d09b314849b4a.png

提取特定文本

7a2f386e732804f7506b5671ec6a0c86.png

统计文本有几行

2d2d418d76787ee56ba7568a5e9479ee.png

查找文件空行所在的行号

d0b1582685bad1cfe59db8fc85586c9f.png

$0代表一行所有内容,$1-$9代表第一列到第九列

01831977d35c6df686e1ab8407422c1e.png

sort 工具

将文件进行排序,并将排序结果标准输出

sort(选项)(参数)

-n 依照数值大小排序

-r 以相反顺序排序

-t 设置排序使用的分割字符

-k 指定需要排序的列

参数:指定需要排序的文件

0f85165e1a88e3b209de843401a6860f.png

求一列的和

abf98646c9eeb5722446c31093472d0b.png

三.shell中一些重要命令

重定向

>>追加

>写入(覆盖写)

2> 重定向标准错误

2>>重定向标准错误

&>重定向标准输出和标准错误

管道操作符号|

前面的内容交给后面处理

wc -l

判断输出内容有几行

56bc8bd9811867a284d230ff44a91fd5.png

输出命令echo

echo  内容    输出一行默认换行

单独echo 相当于空行

echo -e 内容    可以转义字符  (\n,\t)

echo -n 内容     不转义字符

echo  注意事项:

echo “内容”  与 echo '内容'区别

双引号可以包含变量,但单引号不能解析变量

反引号可以解析命令

b9a57c3d3550827faa85c50fdf8f5899.png

设置字体颜色

echo -e “\033[x;ym 内容 \033[0m”

x 字体颜色 30~37

y 背景颜色 40~47

8120ae44faec358f14086ca1b9341b50.png

head

输出文件前10行

d18b2e86d0933d428d5766e68effb838.png

find

find 搜索区域 -name  文件名     以名字查询文件(模糊查询用*)

find 搜索区域 -perm   权限        根据权限查询

find  搜索区域 -user    用户        根据使用者查询

find  搜索区域   -type  文件类型(d,f)   根据文件类型查找

find  搜索区域   -size    文件大小     根据文件大小查询(+大于,-小于,c字节,k,M)

1a4fa852506b2ce0c24e4998c9d3eac9.png

find  搜索区域   -mtime   时间          根据修改时间查找(+超过多少天,-在几天内)

98f42b809f97d646c1c6f59d4de19920.png

shell正则

grep “匹配内容”  文件名

grep -c ‘匹配内容’ 文件

grep -n  ‘匹配内容’ 文件

022a30326913485feefd76848d470dce.png

grep -i "匹配内容" 文件   忽略大小写

ed275e747f0bb0bdc7edf120fbad282f.png

grep -v “内容xx” 文件  不包含内容xx的行(除去特定行)

31d583322af5a28a9cf0bb77d7d052ad.png

grep -E “^xx”/"xx$"   以xx开始和以xx结束(-E代表使用正则)

grep -E ".+xx.+"  内容xx 在行中间

7a28e8ed683f5bd8042afff9d2801f81.png

grep -E "^$" 文件   匹配空行

grep  -E “(xx)+” 文件 匹配多次出现一次或多次xx的行

grep  -E “(xx){num}”  文件  匹配连续出现num次的xx行

uniq命令

uniq -c 文件  打印紧挨着的重复行次数与内容(重复但隔着的不打印)

d462dafb5ea6e97e81466fc8d453fa6f.png

uniq -d 文件 只打印重复的行

2b8dbd0dea70cc1958544e686a372e0f.png

split

split -n 被分割文件  保存文件                   每n行分割,保存到文件中

查看 是否安装服务

rpm -qa | grep  服务名

查看服务是否正常

nc -w num   ip   端口名        有正常的显示,服务正常

594597d4979e72a5de2802a1da4cd388.png

制作菜单

cat   <

内容

eof

cat <

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值