shell脚本

如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell脚本。Shell脚本里面通常内置了多条命令,有的还包含控制语句,比如if和else的条件控制语句,for和select的循环控制语句等。这些内置在一个shell脚本中的命令通常是一次性执行完成,不会不停的返回信息给用户,这种通过文件执行脚本的方式称之为非交互方式。Shell脚本类似于windows下的批处理,但是它比批处理要强大一些,现在windows下有一个叫做power shell的功能可以和linux下的shell功能媲美。我们可以在文本中输入一系列的命令、控制语句和变量,这一切有机的结合起来就形成了功能强大的shell脚本。Windows下的文本文件就是文本文件,不能被执行,但是linux下的文本文件只要将文档属性改成可以执行文件的,只要用chmod 777命令就可以了。

常见的脚本解释器

bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
:在shell中使用**#**进行注释,注意,sh里面没有多行注释,只能每一行加一个#号;

#!/bin/bash
# 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行;
echo "Hello, world!"
变量:

定义变量:

country="China"
Number=101

注意:
1、变量名和等号之间不能有空格;
2、首个字符必须为字母(a-z,A-Z)。
3、中间不能有空格,可以使用下划线(_)。
4、不能使用标点符号。
5、不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量时只需要在一个定义过的变量前面加上美元符号 $ 就可以了, 另外,对于变量的**{}** 是可以选择的, 它的目的为帮助解释器识别变量的边界.

Shell循环语句
  • for 循环
    一般格式为:
for 变量 in 列表
docommand1...commandN
done

注意:列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。
例如:
顺序输出当前列表的数字:

for loop in 1 2 3 4 5
doecho "The value is: $loop"
done
  • while循环
    一般格式为:
while command
doStatement(s) to be executed if command is true
done

例如:

i=0
while [ $i -le 5 ]
doCOUNTER='expr $i+1'echo $i
done
Shell函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
Shell 函数定义的语法格式如下:

function name() {statements[return value]
}

说明:

  • function是 Shell 中的关键字,专门用来定义函数;可以带function fun() 定义,也可以直接fun() 定义,不带任何参数
  • name是函数名;
  • statements是函数要执行的代码,也就是一组语句;
  • return value表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。
shell函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
带参数的函数示例:

funWithParam(){echo "The value of the first parameter is $1 !"echo "The value of the second parameter is $2 !"echo "The value of the tenth parameter is ${10} !"echo "The value of the eleventh parameter is ${11} !"echo "The amount of the parameters is $# !"  # 参数个数echo "The string of the parameters is $* !"  # 传递给函数的所有参数
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出结果:
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意, 10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 10不能获取第十个参数,获取第十个参数需要 10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。

shell脚本举例

要求:依次创建10个目录在相应目录下创建10个文件,在相应文件下添加内容

一般代码格式

#!/bin/bash
for((i=1;i<11;i++))
do
mkdir study.$i                       # 创建目录
done
echo "mkdir success!"
ls study.*                           # 显示目录
sleep 5
cd study.1                           # 进入study.1
for ((i=1; i<11; i++));
dotouch test$i.txt
done                                 # 通过for在study.1目录下创建文件
for file in test1.txt test2.txt test3.txt test4.txt test5.txt test6.txt test7.txt test8.txt test9.txt test10.txt
do
echo -e "11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22" >> $file
done                                 # 通过echo命令向文件添加内容echo /root/ljh/study.2 /root/ljh/study.3 /root/ljh/study.4 /root/ljh/study.5 /root/ljh/study.6 /root/ljh/study.7 /root/ljh/study.8 /root/ljh/study.9 /root/ljh/study.10 | xargs -n 1 cp /root/ljh/study.1/test*.txt                                                                                         # cp命令复制study.1下的所有内容到其余9个目录

调用函数代码格式

通过函数创建10个目录,并进入相应的目录study.1下,在study.1目录下创建10个文件,在往这10个文件添加内容,最后通过while循环调用函数,并通过cp命令复制study.1下的所有内容到其余9个目录

#!/bin/bash
function fun1() {                      # 创建函数if [ $i -le 10 ];thenfor((i=1;i<=10;i++))domkdir study.$ils study.$idonecd study.1for((i=1;i<=10;i++))dotouch test$i.txtecho -e "11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22\n11 22" >> test$i.txtdoneelseecho "添加内容失败!"fiecho "The value of the first parameter is $i !"
}
i=1
while [ $i -le 10 ]dofun1                               # 调用函数((i++))donecd ..echo /root/ljh/study.2 /root/ljh/study.3 /root/ljh/study.4 /root/ljh/study.5 /root/ljh/study.6 /root/ljh/study.7 /root/ljh/study.8 /root/ljh/study.9 /root/ljh/study.10 | xargs -n 1 cp /root/ljh/study.1/test*.txt
程序运行结果:

shell脚本及举例:依次创建10个目录在相应目录下创建10个文件,在相应文件下添加内容相关推荐

  1. 最全shell脚本语句语法使用(超详细)

    博文大纲: 1.对谈式脚本--read语句 2.shell脚本中的测试的字符 3.判断脚本举例 4.条件判断--if语句 5.条件判断--case语句 6.条件判断--function函数结合case ...

  2. linux 定时执行shell脚本 定时任务

    1 #!/bin/bash 2 step=1 3 for ((i=1;i<=60; i+=step)) 4 do 5 $(`/usr/local/php-5.6.22/bin/php /root ...

  3. 《Linux命令行与shell脚本大全》笔记

    初识Linux Shell 什么是Linux Linux可划分为以下四部分: Linux内核 GNU工具 图形化桌面环境 应用软件 深入探究Linux内核 内核主要负责以下四种功能: 系统内存管理 软 ...

  4. shell脚本编写遇到的问题--循环

    shell脚本编写遇到的问题 0 背景 工作中需要修补数据,大概半年的数据;跑数据是scala脚本+python脚本,如果手动补充数据,需要运行180次- 于是,shell脚本搞起来- 1 规划思路 ...

  5. bash 与 shell脚本编写指南

    bash 与 shell脚本编写指南 bash 与 shell脚本编写指南 bash基本命令 man与info命令 遍历目录命令 文件与目录列表命令 处理文件相关命令 处理目录命令 查看文件内容 通过 ...

  6. Shell脚本编程教程

    1.Shell脚本语言的基本结构 1.1 Shell脚本的用途: 自动化常用命令 执行系统管理和故障排除 创建简单的应用程序 处理文本或文件 1.2 Shell脚本基本结构: ​ Shell脚本编程: ...

  7. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  8. shell编程:对话 UNIX: 更多 shell 脚本技术

    尽管在近两年使用过 UNIX 的一些人可能尝试过 shell 脚本编程,但是他们很可能只是研究操作系统的细节,并不精通 shell 脚本编程.本文针对那些希望进一步了解 shell 脚本,并开始编写更 ...

  9. Shell脚本入门学习

    shell脚本语言的使用 shell概述 shell 是一种脚本语言. 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译). 举个 ...

最新文章

  1. VS Code 1.47 发布!官方版 Settings Sync 终于来了!
  2. 一文读懂jar包的小秘密
  3. linux下C语言套接字编程sockaddr和sockaddr_in的区别
  4. MongoDB 入门篇
  5. oracle无监听程序的解决方法(PLSQL)Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务...
  6. 集体智慧编程 - 构建价格模型
  7. Java中获得了方法名称的字符串,怎么样调用该方法
  8. Unity Shader:用几何着色器实现复联3灭霸的终极大招灰飞烟灭
  9. hexo -d 部署的时候报错 FATAL Something's wrong Template render error: expected variable
  10. java 判断double是否为整数_java 中如何判断输入的是int还是double
  11. word在试图打开文件时遇到错误,检查稳定或驱动器文件权限
  12. c语言 数组 迷宫,迷宫问题(C语言实现)
  13. html 按钮控制图片,html怎么设置图片按钮
  14. linux服务添加互信,Linux多节点互信配置
  15. 书籍_《未来世界的幸存者》阮一峰--2/5
  16. 《高性能MySQL》 第三章 服务器性能剖析 读书笔记
  17. Telnet 1521端口连接失败问题,经过四天的努力终于解决!
  18. 【无标题】输入和输出
  19. 实现css文字垂直居中的8种方法
  20. 导航菜单背景切换效果

热门文章

  1. 梅科尔工作室——HarmonyOS应用开发培训第三次作业
  2. C++ 与、或、异或、取反等运算
  3. idea新建springboot项目后始终无法识别org.codehaus.plexus.component.repository.exception.ComponentLookupException
  4. VIO综述论文:A review of visual inertial odometry from filtering and optimisation perspectives
  5. UltraEdit+注册机+激活方法
  6. JS 声音提示 兼容所有浏览器
  7. java 有序数组 频率_java基础最全面总结_1
  8. 一个视频娱乐应用源码
  9. 评高级审计师需要什么计算机运用能力,告诉你怎么成为高级审计师
  10. nginx配置https证书