Linux 的shell脚本基础编程总结
2017-09-08 16:46
585 查看
Linux的Shell种类众多,常见的有四种:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
我们关注的重点是Bash(Bourne Again Shell)易用和免费:
首行:符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。
第二行:以#开头的行就是注释行,直到此行的结束。
编辑完毕:将脚本存盘为XXX.sh,文件名后缀sh表明这是一个Bash脚本文件。
执行脚本:先将脚本文件的属性改为可执行的,
执行脚本的方法是:
完整版例子一个:
注意:Shell Script是一种弱类型语言,使用变量的时候无需声明其类型,是全局变量,变量归当前的Shell所有,任何子进 程都不能访问本地变量。一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加,XXX可以在引号中使用,这一点和其他高级语言是明显不同的。如果出现混淆的情况,可以使用花括号{ }来区分:
来一个复杂的例子详细解析一下:
if函数详解:
Shell Script中if语句的条件部分要以分号来分隔。第三行中的[]表示条件测试,常用的条件测试有下面几种:
[ -f “file"]判断file是否是一个文件
[ a−lt3]判断a的值是否小于3,同样-gt和-le分别表示大于或小于等于
[ -x “file"]判断file是否存在且有可执行权限,同样-r测试文件可读性
[ -n “a"]判断变量a是否有值,测试空串用-z
[ “a"="b” ] 判断a和b的取值是否相等
[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立
要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就**会出错。
函数声明详解:
shell允许将一组命令集或语句形成一个可用块,称为shell函数;函数名前关键字function 加或者不加都可以;
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。函数不必包含很多语句或命令,甚至可以只包含一个echo语句,这取决于使用者。
格式如下:
下面的例子定义了一个函数并进行调用:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
我们关注的重点是Bash(Bourne Again Shell)易用和免费:
#!/bin/sh #这里是注释行
首行:符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。
第二行:以#开头的行就是注释行,直到此行的结束。
编辑完毕:将脚本存盘为XXX.sh,文件名后缀sh表明这是一个Bash脚本文件。
执行脚本:先将脚本文件的属性改为可执行的,
chmod +x XXX.sh
执行脚本的方法是:
./XXX.sh 或者是 sh XXX.sh #要在当前文件目录下,或者使用绝对路径
完整版例子一个:
#!/bin/sh #print hello world in the console window a = "hello world" echo $a #输出结果为:hello world
注意:Shell Script是一种弱类型语言,使用变量的时候无需声明其类型,是全局变量,变量归当前的Shell所有,任何子进 程都不能访问本地变量。一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加,XXX可以在引号中使用,这一点和其他高级语言是明显不同的。如果出现混淆的情况,可以使用花括号{ }来区分:
#!/bin/sh #print hello world in the console window a="hello" # 注意:赋值操作 = 的两边一定不能有空格!!! echo $a #>>>输出结果为hello echo $ac #>>>输出结果为 空 因为ac未赋值 echo ${a}c #>>>输出结果为helloc echo "Hi,$ac" #>>>输出结果为Hi, 因为ac未赋值 echo "Hi,${a}c" #>>>输出结果为Hi,helloc
来一个复杂的例子详细解析一下:
#!/bin/sh # 开头一定要用固定格式 # 注释在# 后面只到行结束 #if函数是用对称的if和fi # $# 表示包括$0在内的命令行参数的个数。在Shell中, # 脚本名称本身是$0,依次是$0、$1、$2…、${10}等等。 # $* 表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表。 if [ $# -lt ]; then # <<HE。。。HE 被称为Here文档用于将多行文本传递给某一命令 # <<开头,后面跟任意字母,结束用相同的字母 cat<<HE Here文档通常会放置多行文本 用来做提示信息, 在运行时会将全部文本打印出来 HE #此处的exit是Linux的命令,表示退出当前进程。 exit fi #if函数结束 OLD="$" #分别将第一和第二参数赋值给变量OLD和NEW。 NEW="$" shift #两条shift的作用是将参数列表中的第一个和第二个参数删除, shift #后面的参数依次变为新的第一和第二参数,注意参数列表不包括$0 if [ -f "$file" ]; then newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"` if [ -f "$newfile" ]; echo "ERROR: $newfile exists already" else echo "renaming mv "$file" "$newfile" fi fi done
if函数详解:
Shell Script中if语句的条件部分要以分号来分隔。第三行中的[]表示条件测试,常用的条件测试有下面几种:
[ -f “file"]判断file是否是一个文件
[ a−lt3]判断a的值是否小于3,同样-gt和-le分别表示大于或小于等于
[ -x “file"]判断file是否存在且有可执行权限,同样-r测试文件可读性
[ -n “a"]判断变量a是否有值,测试空串用-z
[ “a"="b” ] 判断a和b的取值是否相等
[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立
要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就**会出错。
函数声明详解:
shell允许将一组命令集或语句形成一个可用块,称为shell函数;函数名前关键字function 加或者不加都可以;
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。函数不必包含很多语句或命令,甚至可以只包含一个echo语句,这取决于使用者。
格式如下:
函数名(){ command1 command2 ... commandN [ return value ] }
下面的例子定义了一个函数并进行调用:
#!/bin/bash demoFunc(){ echo "aaaaa" } echo "bbbbb" demoFunc #注意:函数调用只需要函数名,不要加() echo "ccccc" 输出的结果为: bbbbb aaaaa ccccc
相关文章推荐
- linux之基础shell脚本编程4 字符串操作,变量赋值,配置用户环境
- Linux学习-shell脚本编程基础(节选)
- Linux练习题-shell脚本编程基础篇(再次施工中)
- linux之基础shell脚本编程3 函数数组
- 【Linux 系统编程】shell 脚本基础学习(一)
- Linux_Shell脚本基础总结
- Linux 基础命令(十)—— SHELL脚本编程进阶(一)
- LinuxC/C++编程基础(13) shell脚本简单实例
- Linux学习-shell脚本编程基础之处理用户输入
- Linux-Shell脚本编程-学习-7-总结前面开启后面的学习
- 嵌入式开发之linux基础第六天学习笔记 shell脚本编程(一)
- linux之基础shell脚本编程2 if语句循环判断
- Linux Bash Shell学习(七):shell编程基础——运行Shell脚本、function
- Linux 基础命令(六)—— SHELL脚本编程基础
- 【Linux 系统编程】shell 脚本基础学习之函数(五)
- Liunx 命令行与shell脚本编程大全 第八章学习笔记(Linux系统的包管理基础)
- Linux 基础命令(六)—— SHELL脚本编程基础
- 嵌入式开发之linux基础第七天学习笔记 shell脚本编程(二)
- linux之基础shell脚本编程1 基础变量赋值
- shell脚本编程基础总结