linuxsh命令详解
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=2
echo “this is the $numnd”
这并不会打印出”this is the 2nd",⽽仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量是没有值的。因此,可以使⽤花括号来告诉shell我们要打印的是num变量:
num=2
echo “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'
#输出⽂件内容到标准输出设备(屏幕)上
read var #显⽰⽤户输⼊,并将输⼊赋值给变量
概念:管道,重定向和backtick(反斜线)
管道“|”将⼀个命令的输出作为另外⼀个命令的输⼊。shell最简单脚本
grep "hello" | wc -l
上述代码表⽰为:在中搜索包含有“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 `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/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感觉这⾥的‘’应该是||
echo “$mailfolder has mail from:”
grep “^From ” $mailfolder
该脚本⾸先判断mailfolder是否可读。如果可读则打印该⽂件中的”From” ⼀⾏。如果不可读则或操作⽣效,打印错误信息后脚本退出。这⾥有个问题,那就是我们必须有两个命令:
◆打印错误信息
◆退出程序
我们使⽤花括号以匿名函数的形式将两个命令放到⼀起作为⼀个命令使⽤。⼀般函数将在下⽂提及。
不⽤‘与’和‘或’操作符,我们也可以⽤if表达式作任何事情,但是使⽤与或操作符会更便利很多。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论