linux.sh脚本中的⼀些常⽤命令
1 开头
程序必须以下⾯的⾏开始(必须⽅在⽂件的第⼀⾏):
linux循环执行命令脚本
#!/bin/sh
符号#!⽤来告诉系统它后⾯的参数是⽤来执⾏该⽂件的程序。在这个例⼦中我们使⽤/bin/sh来执⾏程序。
当编写脚本完成时,如果要执⾏该脚本,还必须使其可执⾏。
要使编写脚本可执⾏:
编译 chmod +x filename 这样才能⽤./filename 来运⾏
2 注释
在进⾏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 环境变量
由export关键字处理过的变量叫做环境变量。我们不对环境变量进⾏讨论,因为通常情况下仅仅在登录脚本中使⽤环境变量。
5 Shell命令和流程控制
在shell脚本中可以使⽤三类命令:
1)Unix 命令:
虽然在shell脚本中可以使⽤任意的unix命令,但是还是由⼀些相对更常⽤的命令。这些命令通常是⽤来进⾏⽂件和⽂字操作的。
常⽤命令语法及功能
echo “some text”: 将⽂字内容打印在屏幕上
ls: ⽂件列表
wc –l filewc -w filewc -c file: 计算⽂件⾏数计算⽂件中的单词数计算⽂件中的字符数
cp sourcefile destfile: ⽂件拷贝
mv oldname newname : 重命名⽂件或移动⽂件
rm file: 删除⽂件
grep ‘pattern’ file: 在⽂件内搜索字符串⽐如:grep ’searchstring’
cut -b colnum file: 指定欲显⽰的⽂件内容范围,并将它们输出到标准输出设备⽐如:输出每⾏第5个到第9个字符cut -千万不要和cat命令混淆,
这是两个完全不同的命令
: 输出⽂件内容到标准输出设备(屏幕)上
file somefile: 得到⽂件类型
read var: 提⽰⽤户输⼊,并将输⼊赋值给变量
: 对⽂件中的⾏进⾏排序
uniq: 删除⽂本⽂件中出现的⾏列⽐如: | uniq
expr: 进⾏数学运算Example: add 2 and 3expr 2 “+” 3
find: 搜索⽂件⽐如:根据⽂件名搜索find . -name filename -print
tee: 将数据输出到标准输出设备(屏幕) 和⽂件⽐如:somecommand | tee outfile
basename file: 返回不包含路径的⽂件名⽐如: basename /bin/tux将返回 tux
dirname file: 返回⽂件所在路径⽐如:dirname /bin/tux将返回 /bin
head file: 打印⽂本⽂件开头⼏⾏
tail file : 打印⽂本⽂件末尾⼏⾏
sed: Sed是⼀个基本的查替换程序。可以从标准输⼊(⽐如命令管道)读⼊⽂本,并将
结果输出到标准输出(屏幕)。该命令采⽤正则表达式(见参考)进⾏搜索。不要和shell中的通配符相混淆。⽐如:将linuxfocus替换为 LinuxFocus :cat text.file | sed ’s/linuxfocus/LinuxFocus/’ >newtext.fileawk: awk ⽤来从⽂本⽂件中提取字段。缺省地,字段分割符是空格,可以使⽤-F指定其他分割符。 | awk -F, ‘{print $1 “,” $3}’这⾥我们使⽤,作为字段分割符,同时打印第⼀个和第三个字段。如果该⽂件内容如下: Adam Bor, 34, IndiaKerryMiller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和 backtick
这些不是系统命令,但是他们真的很重要。
管道 (|) 将⼀个命令的输出作为另外⼀个命令的输⼊。
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`
3) 流程控制
1.if
“if” 表达式如果条件为真则执⾏then后⾯的部分:
if ….; then
….
elif ….; then
….
else
.
fi
⼤多数情况下,可以使⽤测试命令来对条件进⾏测试。⽐如可以⽐较字符串、判断⽂件是否存在及是否可读等等…
通常⽤” [ ] “来表⽰条件测试。注意这⾥的空格很重要。要确保⽅括号的空格。
[ -f "somefile" ] :判断是否是⼀个⽂件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执⾏权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
执⾏man test可以查看所有测试表达式可以⽐较和判断的类型。
直接执⾏以下脚本:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo “your login shell is the bash (bourne again shell)”
else
echo “your login shell is not bash but $SHELL”
fi
变量$SHELL包含了登录shell的名称,我们和/bin/bash进⾏了⽐较。
快捷操作符
熟悉C语⾔的朋友可能会很喜欢下⾯的表达式:
[ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
这⾥ && 就是⼀个快捷操作符,如果左边的表达式为真则执⾏右边的语句。
您也可以认为是逻辑运算中的与操作。上例中表⽰如果/etc/shadow⽂件存在则打印” 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小时内删除。