Shell脚本入门与应用
编写第一个shell脚本
如同其他语言一样,通过我们使用任意一种文字编辑器,比如 nedit、kedit、emacs
、vi 等来编写我们的 shell 程序。程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使
用/bin/sh 来执行程序。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
要使脚本可执行:
chmod +x filename
然后,您可以通过输入: ./filename 来执行您的脚本。
Shell变量
在其他编程语言中您必须使用变量。在 shell 编程中,所有的变量都由字符串组成,
并且您不需要对变量进行声明。
>>本地变量
设置变量
引用变量
清除变量
查看变量
>>环境变量
设置环境变量:
• 引用环境变量 :
• 常用环境变量
– HOME
– PATH
– TERM
– UID
– PWD
– PS1
>>特殊的预定义变量
$#:存储shell程序中命令行参数的个数
$?:存储shell中上一个程序执行的返回值(0表 示命
令执行成 功,非0有问题)
$0:存储shell程序自己的名称
$[1-n]:存储第[1-n]个命令行参数
$*:存储shell脚本的所有参数(不包含$0)
$$:存储shell脚本的进程号(pid)
$!:存储上一个后台执行命令的进程号(pid)
通过一个简单的test.sh脚本来学习:
#!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@"
执行脚本:
# ./test.sh aa bb number:2 scname:./test02.sh first :aa second:bb argume:aa bb
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
常用命令语法
echo "some text": 将文字内容打印在屏幕上
ls: 文件列表
wc -l filewc -w filewc -c file&: 计算文件行数计算文件中的单词数计算文件中
的字符数
cp sourcefile destfile&: 文件拷贝
mv oldname newname : 重命名文件或移动文件
rm file&: 删除文件
grep 'pattern' file&: 在文件内搜索字符串比如:grep 'searchstring'
file.txt
cut -b colnum file&: 指定欲显示的文件内容范围,并将它们输出到标准输出设备
比如:输出每行第 5 个到第 9 个字符 cut -b5-9 file.txt 千万不要和 cat 命令混淆,这是两
个完全不同的命令
cat file.txt: 输出文件内容到标准输出设备(屏幕)上
file somefile&: 得到文件类型
read var: 提示用户输入,并将输入赋值给变量
sort file.txt: 对 file.txt 文件中的行进行排序
uniq: 删除文本文件中出现的行列比如: sort file.txt | 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.file
流程控制和判断
"if" 表达式 如果条件为真则执行 then 后面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断
文件是否存在及是否可读等等...
通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls 是否存在并有可执行权限
[ -n "$var" ] :判断$var 变量是否有值
[ "$a" = "$b" ] :判断$a 和$b 是否相等
函数
一个函数是这个样子的
:
functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
典型的编程步骤
任何优秀的脚本都应该具有帮助和输入参数。
如何调试
最简单的调试命令当然是使用 echo 命令。
可以使用 echo 在任何怀疑出错的地方打印任何变量值。
shell 也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这
样来进行调试:
sh -x strangescript
这将执行该脚本并显示所有变量的值。
shell 还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script
这将返回所有语法错误。
附:
shell中条件判断if中的-z到-d的意义
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
Shell脚本入门与应用的更多相关文章
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- linux的shell脚本入门
Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...
- (一)shell脚本入门
shell脚本入门 1.脚本格式 脚本以#!/bin/bash 开头(指定解析器) 2.第一个shell脚本:helloworld (1)需求:创建一个shell脚本,输出helloworld 运行: ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- 【shell】shell脚本入门
1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...
- Linux入门第五天——shell脚本入门(上)基本概念
一.什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 二.shell入门 1.先导知识 变量知识补充:https://www.cnblogs. ...
- shell脚本入门及基本元素
命令和参数 #!/bin/sh 其中#!用来告诉系统它后面的参数是用来执行该文件的程序,必须放在脚本的首行,不然会在执行脚 本 的时候报错.当一个文件开头的两个字符是#!时,内核会扫描其它的部分看是否 ...
- Linux Shell 脚本入门
linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...
- shell脚本入门
什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
随机推荐
- HD 1533 Going Home(最小费用最大流模板)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- eclipse中Preferences的一些设置
1.在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了一段 ...
- Stream Byte[] 转换
public byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(byt ...
- 如果你也和我一样,OSX反应慢,不妨试试这个
- 在.NET 环境中实现每日构建(Daily Build)--ccnet,MSBuild篇(转载)
每日构建,对我们团队来说一个全新的概念.随着项目开发的进展,在开发过 程需要及时反馈一些BUG和功能要求的处理情况.而在这种情况下每天或隔一段时间Build一个版本,工作量还是比较大的,所以就特别有必 ...
- C++_Eigen函数库用法笔记——Matrix and Vector Arithmetic
Addition and subtraction Scalar multiplication and division Transposition Matrix-matrix and matrix-v ...
- ashx 获取ajax Post到后台json数据
前台页面代码: var json = [{ "Name": "Pavan Kumar Pabothu", "Age": 27, " ...
- 如何设置通过ip访问数据库
文章转自:http://blog.163.com/wz_pk007/blog/static/17062705020119242440713/ 问题:mysql只能用localhost或127.0.0. ...
- require.async换这个方法的transport问题
这个方法是用于在模块中异步加载其他模块的,类似于在页面上的seajs.use. 比如需要在特定条件下才去加载a模块,不必每次都加载,类似于下面这样的代码 if({{some_condition}}){ ...
- Largest Rectangle in a Histogram
2107: Largest Rectangle in a Histogram Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 777 Solved: 22 ...