Shell
shell编程语法和案例
blueicex2020
走自己的路,少走弯路,让别人无路可走,让别人说去吧!
展开
-
Shell—— 32.大小写转换
#! /bin/bash# 注意:脚本第一行一定要注明脚本解释器是bash.不能是sh,或dash# 因为sh软连接有可能指向的是dashvar="Hello,Word"# 把变量中的第一个字符换成大写 echo ${var^} # 把变量中的所有小写字母,全部替换为大写echo ${var^^} # 把变量中的第一个字符换成小写echo ${var,}# 把变量中的所有大...原创 2020-03-22 20:16:47 · 270 阅读 · 0 评论 -
Shell-—— 1.脚本规范
1.shell官方帮助[root@master ~]# man bash[root@master ~]# help forfor: for NAME [in WORDS ... ] ; do COMMANDS; done Execute commands for each member in a list. The `for' loop executes a se...原创 2020-03-18 19:58:50 · 152 阅读 · 0 评论 -
Shell—— 20.if
语法结构:if test-commands1; then commands1;[elif test-commands2; then commands2;]...[else commands3;]fiif的判断很简单,一切都以返回状态码是否为0为判决条件。如果test-commands1执行后的退出状态码为0(不是其执行结果为0),则执行comma...原创 2020-03-18 19:58:04 · 124 阅读 · 0 评论 -
Shell—— 21.case
:case语法结构:case word in [ [(] pattern [| pattern]…) command-list ;;] …esacsysV风格的服务启动脚本是shell脚本中使用case语句最典型案例。例如:case “$1” instart)start;;stop)stop;;restart)restart;;re...原创 2020-03-18 19:56:46 · 277 阅读 · 0 评论 -
Shell—— 22.select
selectshell中提供菜单选择的条件判断结构。例如:[root@xuexi ~]# select fname in cat dog sheep mouse;do echo your choice: “$REPLY) $fname”;break;donecatdogsheepmouse#? 3 # 在此选择序号3your choice...原创 2020-03-18 19:54:07 · 270 阅读 · 0 评论 -
Shell—— 23.for
for循环在shell脚本中应用极其广泛,它有两种语法结构:结构一:for name [ [ in [ word ... ] ] ; ] do cmd_list ; done结构二:for (( expr1 ; expr2 ; expr3 )) ; do cmd_list ; done结构一中:将扩展in word,然后按照IFS变量对word进行分割,并依次将分割的单词赋值给变量nam...原创 2020-03-18 19:52:45 · 172 阅读 · 0 评论 -
Shell—— 24.while
while使用while循环尽量要让条件运行到可以退出循环,否则无限循环。一般都在命令体部分加上变量的改变行为。语法结构:while test_cmd_list; do cmd_list; done首先执行test_cmd_list中的命令,当test_cmd_list的最后一个命令的状态码为0时,将执行一次cmd_list,然后回到循环的开头继续执行test_cmd_list。只有te...原创 2020-03-18 19:50:43 · 207 阅读 · 0 评论 -
Shell—— 28.sort
sort是排序工具,它完美贯彻了Unix哲学:“只做一件事,并做到完美”。它的排序功能极强、极完整,只要文件中的数据足够规则,它几乎可以排出所有想要的排序结果,是一个非常优质的工具。虽然sort很强大,但它的选项很少,使用方法也很简单。更让人觉得它成功的地方在于:即使想要实现复杂、完整的sort功能,所使用的选项和一般使用时的选项没什么不同。只不过要实现复杂功能时,必须得理解sort是如何工作的...原创 2020-03-18 19:46:12 · 373 阅读 · 0 评论 -
Shell—— 30.seq
seq命令用于输出数字序列。支持正数序列、负数序列、小数序列。seq [OPTION]… LAST # 指定输出的结尾数字,初始值和步长默认都为1seq [OPTION]… FIRST LAST # 指定开始和结尾数字,步长默认为1seq [OPTION]… FIRST INCREMENT LAST # 指定开始值、步长和结尾值OP...原创 2020-03-18 19:08:25 · 324 阅读 · 0 评论 -
Shell—— 29.uniq
uniq是去重,不相邻的行不算重复值。uniq [OPTION]... [INPUT [OUTPUT]]选项说明:-c:统计出现的次数(count)。-d:只显示被计算为重复的行。-D:显示所有被计算为重复的行。-u:显示唯一值,即没有重复值的行。-i:忽略大小写。-z:在末尾使用\0,而不是换行符。-f:跳过多少个字段(field)开始比较重复值。-s:跳过多少个字符开始比...原创 2020-03-18 19:05:43 · 100 阅读 · 0 评论 -
Shell—— 25.until
until和while循环基本一致,所不同的仅仅只是test_cmd_list的意义。语法结构:until test_cmd_list; do cmd_list; done首先判断test_cmd_list中的最后一个命令,如果状态码为非0,则执行一次cmd_list,然后再返回循环的开头再次执行test_cmd_list,直到test_cmd_list的最后一个命令状态码为0时,才退出循...原创 2020-03-18 19:01:15 · 149 阅读 · 0 评论 -
Shell—— 31.系统函数functions
/etc/rc.d/init.d/functions几乎被/etc/rc.d/init.d/下所有的Sysv服务启动脚本加载,也是学习shell脚本时一个非常不错的材料,在其中使用了不少技巧。在该文件中提供了几个有用的函数:daemon:启动一个服务程序。启动前还检查进程是否已在运行。killproc:杀掉给定的服务进程。status:检查给定进程的运行状态。success:显示绿色的"...原创 2020-03-18 18:59:37 · 831 阅读 · 0 评论 -
Shell—— 27.tr
1.1 简介tr主要用于将从标准输入读取的数据进行结果集映射、字符压缩和字符删除。它首先会将读取的标准输入进行排序然后按照某种方式换行,然后再根据给出的命令行参数做相关处理。tr [options] [SET1] [SET2]-c:使用SET1的补集-d:删除字符-s:压缩字符-t:截断SET1,使得SET1的长度和SET2的长度相同1.2 tr映射如果同时指定了SET1和SET2...原创 2020-03-09 10:12:40 · 174 阅读 · 0 评论 -
Shell—— 19.test&[ ]&[[ ]]
test可用于测试表达式,支持测试的范围包括:字符串比较,算术比较,文件存在性、属性、类型等判断。在shell中,几乎所有的判断都使用test实现。[]完全等价于test,只是写法不同。双中括号[[]]基本等价于[],它支持更多的条件表达式,还允许在双中括号内使用逻辑运算符"&&"、"||"、"!“和”()",但这些使用单中括号都能实现,只不过多写几个单中括号而已。单中括号[]无...原创 2020-03-07 22:58:32 · 192 阅读 · 0 评论 -
shell—— 18.date、sleep和usleep
1.date命令date获取和设置操作系统的时间,hwclock获取硬件时间。date选项"-d",描述获取什么时候的时间,不能使用"now"关键字,3天前"3 days ago",3天后"3 days",昨天"yesterday",下周一"next Monday",epoch时间"@EPOCH"。date命令的显示格式:date [+format],其中"+“表示从前面的时间中获取其中的格...原创 2020-03-07 22:28:14 · 309 阅读 · 0 评论 -
Shell—— 17.IFS
bash下的很多命令都会分割单词,绝大多数时候默认是采用空格作为分隔符,有些时候遇到制表符、换行符也会进行分隔。最典型的是"for i in a b c",它会分割变量列表"a b c"使其成为三个变量。这种分隔符是由IFS变量指定的。IFS是bash内部字段分隔符的环境变量。[root@master ~]# set | grep IFSIFS=$' \t\n'默认的IFS在碰到空格、制...原创 2020-03-07 22:05:21 · 320 阅读 · 0 评论 -
Shell—— 16.I/O重定向
1. 文件描述符(file description,fd)文件描述符是IO重定向中的重要概念。文件描述符使用数字表示,它指明了数据的流向特征。软件设计认为,程序应该有一个数据来源、数据出口和报告错误的地方。在Linux系统中,它们分别使用描述符0、1、2来表示,这3个描述符默认的目标文件(设备)分别是/dev/stdin、/dev/stdout、/dev/stderr,它们分别是各个终端字符设备...原创 2020-03-07 22:04:52 · 185 阅读 · 0 评论 -
Shell—— 14.命令替换和命令组合
使用反引号"``"(在波浪线的按键上)或者$()来执行命令替换。使用括号()来组合一系列命令。[root@master ~]# echo what date it is? $(date +%F)what date it is? 2016-09-25[root@master tmp]# echo what date it is? date +%F # 或者使用反引号反引号和()基本几乎等价...原创 2020-03-07 22:03:56 · 156 阅读 · 0 评论 -
Shell—— 13.数组
变量在内存中占用的空间是离散的,数组在内存中是先开辟一段连续的大内存空间,随后数组中的每个元素都放入数组内存中。数组元素使用数组index标识。bash里有两种数组:普通数组和关联数组。1.索引数组1.1 数组定义和引用[root@master ~]# array=(1 2 3 4 5)[root@master ~]# echo ${array[0]}11.2 打印数组所有值[roo...原创 2020-03-07 22:03:30 · 143 阅读 · 0 评论 -
Shell—— 12.tee双重定向
tee [-a] file-a:默认是将输出覆盖到文件中,使用该选项将变为追加行为。file:除了输出到标准输出中,还将输出到file中。如果file为"-",则表示再输入一次到标准输出中。将a开头的文件内容全部保存到b.log,同时把副本交给后面的的cat,使用这个cat又将内容保存到了x.log。其中"-"代表前面的stdin。[root@master tmp]# cat a* | t...原创 2020-03-07 22:02:59 · 511 阅读 · 0 评论 -
Shell—— 11.cat和重定向
[root@master tmp]# cat <<eof>log.txt # 覆盖的方式输入到log.txt> ..........> eof或[root@master tmp]# cat >log1.txt <<eof > ..........> eofeof部分都必须使用"<<eof",它表示her...原创 2020-03-07 22:02:34 · 309 阅读 · 0 评论 -
Shell—— 10.重定向
标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的文件描述符分别是0、1和2。标准输入:/dev/stdin、 0 、<(没有包含<<符号)标准输出 :/dev/stdout、1、>或>>标准错误:/dev/stderr 、2、 >或>>使用"-“也表示/dev/stdin[root@master ~]#...原创 2020-03-07 22:01:57 · 176 阅读 · 0 评论 -
Shell—— 9.管道
管道是为了解决进程间通信问题而存在,它可以让两个进程之间的数据进行传递,将一个进程的输出数据传递给另一个进程作为其输入数据。管道左边是数据给予方,管道右边是数据接收方。管道其本质是数据传递,管道左边的输出数据放入内存,由管道右边的进程读取。假如内存不足以完全存放输出数据,则管道左边的进程将一直等待,直到管道右边取出内存中一部分的数据以让管道左边的进程继续输出,而管道右边的进程在管道左边的进程启动...原创 2020-03-07 22:01:32 · 222 阅读 · 0 评论 -
Shell—— 8.bc命令
bc可用于浮点数的计算,是linux中的计算器。该命令功能丰富、强大的让人吐血,支持自定义变量、自定义函数表达式逻辑、支持科学计算。1.官方文档[root@node1 ~]# bc --helpusage: bc [options] [file …]-h --help print this usage and exit-i --interactive force i...原创 2020-03-07 22:00:49 · 1279 阅读 · 0 评论 -
Shell—— 7.数学运算
使用let、(())、(())或(())或(())或[]进行基本的整数运算,使用bc进行高级的运算,包括小数运算。其中expr命令也能进行整数运算,还能判断参数是否为整数,具体用法见expr命令全解。其中let和(())几乎完全等价,除了做数学运算,还支持数学表达式判断,例如数值变量a是否等于3:let a3或((a3)),但一般不会使用它们来判断,而是使用test命令结合条件表达式:test ...原创 2020-03-07 22:00:21 · 117 阅读 · 0 评论 -
Shell—— 6.expr
1. info expr‘expr’支持模式匹配和字符串操作。字符串表达式的优先级高于数值表达式和逻辑关系表达式。‘STRING : REGEX’执行模式匹配。两端参数会转换为字符格式,且第二个参数被视为正则表达式(GNU基本正则),它默认会隐含前缀"^"。随后将第一个参数和正则模式做匹配。如果匹配成功,且REGEX使用了’(‘和’)’,则此表达式返回匹配到的,如果未使用’(‘和’)’,则...原创 2020-03-07 21:59:50 · 167 阅读 · 0 评论 -
Shell—— 5.变量
1.环境变量环境变量常用大写字母表示。常见的环境变量有HOSTNAME、SHELL、HISTSIZE、USER、PATH、PWD、LANG、HOME、LOGNAME。分别表示当前主机名、SHELL的路径即bash的类型、history保存多少记录、当前用户名、自动搜索路径、当前目录、使用的语系(临时修改语系时就改这个变量)、当前用户的家目录、当前登录的用户。查看当前用户的环境变量。[root...原创 2020-03-07 21:58:59 · 291 阅读 · 0 评论 -
Shell—— 2.输出echo
1.官方文档[root@master soft]# help echoecho: echo [-neE] [arg ...] Write arguments to the standard output. Display the ARGs on the standard output followed by a newline. Options: ...原创 2020-03-07 14:15:50 · 277 阅读 · 0 评论 -
Shell—— 3.输出printf
printf格式化输出1.官方文档[root@master ~]# help printf printf: printf [-v var] format [arguments] Formats and prints ARGUMENTS under control of the FORMAT. Options: -v var assign the outp...原创 2020-03-07 14:15:06 · 313 阅读 · 0 评论 -
Shell—— 4.执行顺序
1.分号";"command1;command2command1 /2依次执行,都执行,不管对与错。2.&&&&前面语句执行成功,才执行后面的语句。3.||||前面语句执行不成功,才执行后面的语句。4. command1 && command2 || command3相当于if5. command1 && comma...原创 2020-03-07 14:14:40 · 308 阅读 · 0 评论 -
Linux——shell编程基础笔记
一、变量1.变量的赋值方式先写变量名,紧接着是“=”,最后是值,中见无空格。变量不区分变量类型,如需要指定变量类型可以使用declare显示定义变量类型。变量可分为环境变量和普通(局部)变量。shell的环境变量用来确定登陆的用户名、命令路径、终端类型、登录目录。永久保存环境变量,可以在用户家目录下的.bash_profile或.bashrc(非用户登录,如ssh)或/ect/profile中...原创 2020-02-19 17:47:55 · 921 阅读 · 0 评论 -
Linux——Shell脚本for
[root@master ~]# help forfor: for NAME [in WORDS ... ] ; do COMMANDS; done Execute commands for each member in a list. The `for' loop executes a sequence of commands for each member in a...原创 2020-02-02 19:18:57 · 169 阅读 · 0 评论