linux sh命令详解
1. 可能需要的执行方式
linux下执行.sh文件的方法
.sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。
2. 开头:#!/bin/sh
shell程序必须以“#!/bin/sh”开始。shell中#一般表示注释的意思,所以很多时候认为"#!"也是注释,但实际上并不是。
"#!/bin/sh"是对shell的声明,说明你所用的是哪种类型的shell及其路径所在。
#!/bin/是指此脚本使用.bin/sh来执行。
#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径,如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本,如果脚本被编写为在Kornshell ksh中运行,而默认运行shell脚本的为C shell csh,则脚本在执行过程中很可能失败。所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。
3. 变量
在其他编程语言中必须使用变量。在shell编程中,所有变量都由字符串组成,并且不需要对变量进行声明。要赋值给一个变量,可以这样写:
#!/bin/sh#对变量赋值:a=”hello world”
# 现在打印变量a的内容:echo “A is:”echo $a
有时候变量名很容易与其他文字混淆,比如:
num=2echo “this is the $numnd”
这并不会打印出”this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量是没有值的。因此,可以使用花括号来告诉shell我们要打印的是num变量:
num=2echo “this is the ${num}nd”
这样才会打印”this is the 2nd"
4. Shell命令和流程控制
在shell脚本中可以使用以下命令:
Unix命令
虽然在shell脚本中可以使用任意的unix命令,但还是有一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
如:
echo "some text" #将文字内容打印在屏幕上ls #文件列表cp sourcefile destfile #文件拷贝mv oldname newname #重命名文件或移动文件rm file #删除文件grep 'pattern' file #在文件内搜索字符串,如:grep 'searchstring' file.txtcat file.txt #输出文件内容到标准输出设备(屏幕)上read var #显示用户输入,并将输入赋值给变量
概念:管道,重定向和backtick(反斜线)
管道“|”将一个命令的输出作为另外一个命令的输入。
grep "hello" file.txt | wc -l
上述代码表示为:在file.txt中搜索包含有“hello”的行并计算其行数。在这里grep命令的输出作为wc命令的输入。
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
>写入文件并覆盖旧文件
>>追加到文件的尾部,保留旧文件内容。
反短横线"`":使用反短横线可以将一个命令的输出作为另一个命令的一个命令行参数。
find . -mtime -1 -type f -print
上述语句用来查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果想将所有查找到的文件打一个包,则可以使用一下linux脚本:
#!/bin/sh# The ticks are backticks (`) not normal quotes (‘):tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
流程控制
if
"if"表达式,如果条件为真则执行then后面的部分:
if ….; then….elif ….; then….else….fi #注意是以fi结尾
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件时都存在以及是否可读等等…
测试条件
通常使用"[ ]"来表示测试条件。注意这里的空格很重要,要确保方括号里的空格。
[ -f "somefile" ] #判断文件是否存在[ -d "testResults/" ] #判断目录testResults/是否存在[ -x "/bin/ls" ] #判断/bin/ls文件是否存在并有可执行权限[ -n "$var" ] #判断$var变量是否有值[ "$a" = "$b" ] #判断$a和$b是否相等
快捷操作符
熟悉C语言可能会喜欢一下表达式:
[ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
这里"&&"就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。当然也可以将上述表达式认为是逻辑运算中的与操作。
同样或操作"||"在shell编程中也是可用的:
#!/bin/shmailfolder=/var/spool/mail/james[ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感觉这里的‘’应该是||echo “$mailfolder has mail from:”grep “^From ” $mailfolder
该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From” 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
◆打印错误信息
◆退出程序
我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
不用‘与’和‘或’操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。
linux sh命令详解相关推荐
- linux awk命令详解,使用system来内嵌系统命令,批量github,批量批下载视频, awk合并两列...
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- linux crontab 管理,linux crontab 命令详解
linux crontab 命令详解 使用方式 : crontab [ -u user ] file crontab [ -u user ] { -l | -r | -e } 说明 : crontab ...
- 【Linux】Linux crontab 命令详解
原文来自:http://ir.hit.edu.cn/~wsong/development/crontab.html Linux crontab 命令详解 在 Linux 中,任务可以被配置在指定的时间 ...
- linux mount命令衔接,Linux mount命令详解:挂载Linux系统外的文件
Linux mount命令详解:挂载Linux系统外的文件 <Linux挂载>一节讲到,所有的硬件设备必须挂载之后才能使用,只不过,有些硬件设备(比如硬盘分区)在每次系统启动时会自动挂载, ...
- Linux常用命令详解(两万字超长文)
Linux常用命令详解 作为一枚程序员,熟练掌握一些常见的linux命令是很有必要的,掌握这些命令能帮助我们更好地管理Linux系统,提高工作效率,并有效地解决各种问题,为了方便自己后续查阅以及帮助不 ...
- linux curl命令详解(附使用示例)
Linux curl命令详解 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称u ...
- nohup命令及其输出文件 linux nohup命令详解
linux nohup命令详解 nohup命令及其输出文件 nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终 ...
- 深度学企业linux awk命令详解与应用(下篇)
开篇语: 我们在<一篇速学企业linux awk命令详解与应用(上篇)>中介绍了 awk 的基本用法,其实在awk 脚本程序中,还支持使用一些编程语言,比如变量.数组.分支结构(if-th ...
- linux awk命令根据分隔符输出,Linux运维知识之Linux awk命令详解
本文主要向大家介绍了Linux运维知识之Linux awk命令详解,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. awk :适用程序,一种unix工具 就是一个强大的文本分析工 ...
最新文章
- HarmonyOS Image 属性了解
- linux 不能运行程序代码,linux-无法在Ubuntu上运行我自己的OpenGL 3程序
- 【numpy学习笔记】数组的切片,索引,迭代
- 步步为营UML建模系列二、部署图(Deployment Diagram)
- 双绞线的八根线的作用
- golang 时间原点 时间日期格式化
- 国内 Java 开发者必备的两个装备,你配置上了么?
- MySQL 创建用户与修改密码
- Visifire Silverlight Charts (基于SilverLight的Chart组件)
- Ubuntu 16.04 下 Vim安装
- [ZJOI2010] 排列计数(dp + 组合数)
- asdm不能登录问题;浏览器必须是ie,不能是chrome或者firefox;java的版本,尤其是安全等级和例外需要调整...
- 骆昊python100天百度云_骆政园-西安交通大学能源与动力学院
- AS/400开发经验点滴(六)如何制作下拉菜单
- 做某一项目常见知识点链接
- [Android移动安全渗透基础教程] 模拟器篇
- 半波耦合器的设计——RSOFT
- spring读取外部文件+SpEL
- 【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
- 谷歌浏览器Chrome 100即将发布,但可能无法正常使用?