Linuxshell脚本的建⽴与执⾏
在进⾏linux测试时编写脚本是必不可少的。最近经常使⽤Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本。可以把太多的命令写成⼀个脚本,这样每次执⾏⼀遍  shell⽂件,就可以省去了敲击键盘的时间。于是在⽹上搜了⼀些有关Linux下脚本编程的内容。
Shell不仅仅是命令的收集,⽽且是⼀门⾮常棒的编程语⾔。您可以通过使⽤shell使⼤量的任务⾃动化,shell特别擅长系统管理任务,尤其适合那些易⽤性、可维护性和便携性⽐效率更重要的任务。
⽤户可以使⽤任何⽂本编辑器编辑shell脚本⽂件,例如VI、gedit等。
Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称。
下⾯我们开始编写⼀个Shell脚本:
1. 程序必须以下⾯的⾏开始(必须放在⽂件的第⼀⾏):
#!/bin/sh
符号#!⽤来告诉系统它后⾯的参数是⽤来执⾏该⽂件的程序。在这个例⼦中我们使⽤/bin/sh来执⾏程序。
2. 注释
在进⾏shell编程时,以#开头的句⼦表⽰注释,直到这⼀⾏的结束。如同其他编程语⾔⼀样,我们在编写脚本时也应该尽可能地添加注释,那么即使相当长的时间内没有使⽤该脚本,我们也能在很短的时间内明⽩该脚本的作⽤及⼯作原理。
3. 变量
在其他编程语⾔中您必须使⽤变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进⾏声明。要赋值给⼀个变量,您可以这样写:变量名=值
取出变量值可以加⼀个美元符号($)在变量前⾯:
#!/bin/sh
#对变量赋值:
a="hello world"
# 现在打印变量a的内容:
echo "A is:"
echo $a
4. 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 -b5-
千万不要和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指定其他分割符。cat  | awk -F, ''{print $1 "," $3 }''这⾥我们使⽤,作为字段分割符,同时打印第⼀个和第三个字段。如果该⽂件内容如下: AdamBor, 34, IndiaKerry Miller, 22, USA命令输出结果为:AdamBor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和 backtick
这些不是系统命令,但是他们真的很重要。管道 (|) 将⼀个命令的输出作为另外⼀个命令的输⼊。
grep "hello" | wc -l
在中搜索包含有”hello”的⾏并计算其⾏数。
在这⾥grep命令的输出作为wc命令的输⼊。当然您可以使⽤多个命令。
重定向:将命令的结果输出到⽂件,⽽不是标准输出(屏幕)。
>  写⼊⽂件并覆盖旧⽂件
>> 加到⽂件的尾部,保留旧⽂件内容。
反短斜线
使⽤反短斜线可以将⼀个命令的输出作为另外⼀个命令的⼀个命令⾏参数。
命令: find . -mtime -1 -type f -print ⽤来查过去24⼩时(-mtime –2则表⽰过去48⼩时)内修改过的⽂件。如果您想将所有查到的⽂件打⼀个包,则可以使⽤以下脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes (''):
tar -zcvf `find . -mtime -1 -type f
-print`
3) 流程控制
"if" 表达式如果条件为真则执⾏then后⾯的部分:
if ....; then
....
elif ....; then
....
else
....
fi
linux循环执行命令脚本
⼤多数情况下,可以使⽤测试命令来对条件进⾏测试。⽐如可以⽐较字符串、判断⽂件是否存在及是否可读等等…通常⽤" [ ] "来表⽰条件测试。注意这⾥的空格很重要。要确保⽅括号的空格。
[ -f "somefile" ] :判断是否是⼀个⽂件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执⾏权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
5. 执⾏脚本 Linux下的sh⽂件默认是有执⾏权限的。我们可以⽤命令:ls -l file_name来查看⽤户对⽂件的权限。如果没有执⾏权限,可以执⾏以下命令添加:chmod +x file_name 。然后可以通过运⾏:sh XX.sh这样的命令来运⾏脚本。当然不同的系统可能不完全相同,需要根据实际情况来。例如有的Linux下是./XX.sh就可以运⾏。
概括地来说,shell对shell脚本的调⽤可以采⽤3种⽅式:
(1)⼀种是将⽂件名作为shell命令的参数,其调⽤格式为:
$ Bash script_file
当要被执⾏的脚本⽂件没有可执⾏权限时,只能使⽤这种调⽤⽅式。
(2)另⼀种调⽤的⽅法是先将脚本⽂件的访问权限更改为可执⾏,以便该⽂件可以作为执⾏⽂件调⽤。
具体的⽅法是:$chmod +x  script_file
$PATH=$PATH:$PWD
$script_file
(3)当执⾏⼀个脚本⽂件时,Shell就产⽣了⼀个Shell(即⼀个⼦进程)去执⾏⽂件中的命令。因此,脚本⽂件的变量值不能传递到当期Shell(即⽗进程)。为了使脚本⽂件中的变量值传递到当前Shell,必须在命令⽂件名前⾯加“.”。即:
$./script_file
“.”命令的功能是在当前shell中执⾏脚本⽂件中的命令,⽽不是产⽣⼀个⼦shell执⾏命令⽂件中的命令。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。如果你想了解更多相关内容请查看下⾯相关链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。