博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本学习(一)
阅读量:6511 次
发布时间:2019-06-24

本文共 3357 字,大约阅读时间需要 11 分钟。

  hot3.png

用vim或vi等编写Shell脚本的格式是固定的

#!/bin/sh 可以换为 #!/bin/bash
bash下可以进行一些计算,如let,变量间的运算

#!/bin/sh#commentscode

#!

告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误

#

注释行直到此行的结束。

保存文件为filename.sh,之后添加可执行权限

chmod +x filename.sh

打印Hello,world的示例:

#!/bin/sh#第一个shell脚本#声明一个变量a,并赋值a="Hello,world"#将变量a的值显示的控制台上echo $a

=

变量赋值paramName=paramValue

echo

在控制台上回显数据,相当于java中的System.out.println()

$

引用某个变量,$a就是引用变量a,也可以使用${a},可嵌套在""中使用

${}

引用某个变量,${a}就是引用变量a的值,这是为了避免混淆.

#!/bin/sh#说明$与${}的区别a="Hello,world"#会查找变量as,结果显示Test1,echo "Test1,$as"#会查找变量a,结果显示Test2,Hello,worldsecho "Test2,${a}s"

${#}

得到某个变量的长度,如${#PATH}可以返回PATH变量对应的字符串长度

$#

表示命令行参数的个数

$0,$1,...$9,${10},...

$0对应脚本名称,$1对应第一个参数,没有参数时什么都不显示

#!/bin/sh#输出参数个数echo "参数个数:"$##输出脚本名称echo "脚本名称:"$0#输出第一个参数echo "第一个参数:"$1

假如此脚本保存为文件hello.sh

lhp@lhp:~/shell_ex$ ./hello.sh 参数个数:0脚本名称:./hello.sh第一个参数:lhp@lhp:~/shell_ex$ ./hello.sh 12参数个数:1脚本名称:./hello.sh第一个参数:12

$*

等价于"$1c$2c$3c...$n",c是分隔符(IFS的第一个字符)

$@

等价于"$1" "$2" ... "$n"; $@比较常用

shift

删除参数列表即$*中的第一个参数,可多次使用来删除多个参数,当没有参数时使用shift会报错:can't shift that many

if [];then
    ...
elif [];then
    ...
else
    ...
fi

#!/bin/shif [ $# -gt 3 ];then    echo "参数个数大于3"elif [ $# -lt 2 ];then    echo "参数个数小于2"else    echo "参数个数为3"fi

常用的测试条件

[ $a -gt 3 ] 判断$a的值是否大于3

[ $a -ge 3 ] 判断$a的值是否大于或等于3

[ $a -lt 3 ] 判断$a的值是否小于3

[ $a -le 3 ] 判断$a的值是否小于或等于3

[ $a -eq 3 ] 判断$a的值是否等于3

[ $a -ne 3 ] 判断$a的值是否不等于3

[ -f "$file" ] 判断$file是否是一个文件

[ -h "$file" ] 判断$file存在且是一个软链接

[ -x "$file" ] 判断$file是否可执行

[ -r "$file" ] 判断$file是否可读

[ -w "$file" ] 判断$file是否可写

[ -d "$file" ] 判断$file是否为目录

[ -e "$file" ] 判断$file是否存在

[ -c "$file" ] 判断$file是否是一个字符设备的文件路径

[ -b "$file" ] 判断$file是否是一个块设备的文件路径

[ -L "$file" ] 判断$file是否是一个符号链接

[ -n "$a" ] $a为非空字符串就返回true

[ -z "$a" ] $a为空字符串就返回true

[ "$a" = "$b" ] 判断$a和$b的取值是否相等,同样的有 != > <

[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,逻辑与

[ cond1 -o cond2 ] 判断cond1和cond2是否至少一个成立,逻辑或

要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就会出错

多个条件之间也可以使用 && || 来连接

可以获取当前执行脚本所在的目录位置

pgrep

查看相关进程的进程ID,如查看火狐浏览器的进程ID pagrep firefox

cat /proc/$PID/environ | tr '\0' '\n'

查看$PID对应进程的相关环境变量,并通过tr命令将每个变量占一行显示,默认所有的变量是通过null字符'\0'分割的,这里将'\0'替换为'\n'

cat -s file

查看文件,并压缩连续的空行为单独一行

cat -T file

查看文件,并将制表符标记成 ^I

录制与回放终端会话

# -t用于将时序数据导入stderr# 2> 用于将stderr重定向到timing.log# timing.log用于存储时序信息# output.session用于存储命令输出script -t 2> timing.log -a output.session#输入相关命令type commands;......#通过exit退出录制过程exit#通过以下命令就可以回放录制的命令执行过程scriptreplay timing.log output.session

多用户之间进行广播

打开2个终端:terminal1,terminal2这2个终端当前路径要一致

1.在terminal1中输入:

mkfifo scriptfifo

2.在terminal2中输入

cat scriptfifo

3.在terminal1中输入

script -f scriptfifo#之后,这里输入的命令及回应都同时在2个终端上显示#需要结束会话,输入exit即可

sed

是stream editor(流编辑器)的缩写,是文本处理中非常重要的工具

能够完善地配合正则表达式使用

sed -i 's/pattern/replace_string/' file#-i 将替换的结果应用于原文件,如果不使用-i,原文件不会发生任何变化#这个命令只会将每一行中第一处符合样式的内容替换掉#如果要替换每一行中所有符合样式的内容,需要参数gsed -i 's/pattern/replace_string/g' file#从第5处匹配开始进行替换,第N处,使用Ngsed -i 's/pattern/replace_string/5g' file#移除匹配样式的行sed -i '/pattern/d' file#示例:移除空白行,通过cat -A file可以看到空白行就只对应一个$sed -i '/^$/d' file#匹配成功的字符串,可以用&来标记#正则表达式\w\+表示一个单词echo this is an example | sed 's/\w\+/[&]/g'[this] [is] [an] [example] #子串匹配标记可以用\1 \2..来表示#\(pattern\)用以匹配子串, 这里匹配到的子串是7echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' this is 7 in a numberecho seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1'EIGTH seven

 

 

 

转载于:https://my.oschina.net/lhplj/blog/395708

你可能感兴趣的文章
软件需求间谍
查看>>
struts2+jquery+json集成
查看>>
一个得到内存信息的shell以及遇到的一个坑
查看>>
Reboot/halt/shutdown command on CentOS 7
查看>>
OpenAI最新成果:无监督情绪神经元(水军面临失业威胁……)
查看>>
关于extmail邮件服务器安装extsuite-webman出现的报错
查看>>
NoSQL--Redis 2.4--Set
查看>>
SVN使用教程总结
查看>>
linux和window是服务器时间同步
查看>>
Scenario 1 – HP C7000 Virtual Connect FlexFabric以太网网络设计Active/Standby Uplinks
查看>>
Linux RPM 命令详解及源码编译安装
查看>>
智能机时代,安居客让寻找房源更有效率
查看>>
Discuz建站教程:]本地安装discuz网站
查看>>
Apache安装
查看>>
修改centos系统默认编辑器
查看>>
gvim安装后,英文版与中文版如何互相切换
查看>>
读《Go并发编程实战》第4章 流程控制方式
查看>>
rpm安装、升级、查询与安全验证
查看>>
CUDA学习(一百零二)
查看>>
CUDA学习(一百零一)
查看>>