Linux系统编程学习笔记(5)-基本shell脚本编程
来源:互联网 发布:热力学计算软件共同点 编辑:程序博客网 时间:2024/06/05 15:39
什么是shell
shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,通俗一点讲,我们平时在终端输入的各种命令,这就是shell程序,而某些时刻,一句一句的输入命令,执行命令过于繁琐,或者有时需要连续执行n多次同样的命令,这就可以吧很多天shell语句存放在一个文件中,类似于C语言,按照一定的逻辑或者次序依次执行shell命令,这样的文件就叫做脚本,逻辑就叫做shell脚本语言,这里只记录部分简单的用法。
shell的语法
在了解语法之前,首先应了解shell的执行方式,这里不做过多的介绍,在老版本的Unix与Linux中,sh作为shell命令的执行方式,近几年bash已经逐渐取代的sh,编写脚本时,脚本文件起始处必须要有以下代码:
#!/bin/bash
或者是
#!/bin/sh
没有这两条命令shell程序将无法执行。
同时注意,在编写完成shell脚本后,需要对脚本增加可执行权限才可以以”./”的形式执行脚本。
变量
shell脚本中,使用变量之前不需要对变量进行声明(与C语言有很大差距),在使用变量时自动声明,且默认情况下,所有变量都被看作字符串加以储存。若想读取变量值,要在变量前增加”$”。shell程序会在需要时吧数值型字符串转换为对应的数值以对它们进行操作。下面举一个简单的例子,编辑脚本文件test.sh:
#!/bin/bashtest=helloecho test
chmod +x test.sh
程序将输出:
test
若将test.sh修改为如下:
#!/bin/bashtest=helloecho test
程序将输出输出
hello
修改为下面时:
#!/bin/bashtest=5+7echo $test
程序将输出:
5+7
另外,引号的使用在shell脚本中也有很大作用,在变量值中有空格时,字符串必须使用双引号括起,
#!/bin/bashtest="hello body"echo $testecho "$test"echo '$test'echo \$testecho Enter some textread testecho '$test' now equals $test
结果为
hello bodyhello body$test$testEnter some text
此时会等待用户从终端输入,输入hai后结果为:
hello bodyhello body$test$testEnter some texthai$test now equals hai
read会等待用户输入,并将用户输入的值保存到read后面的变量当中。
访问参数变量
在shell脚本中,可以使用
#!/bin/bashtest="hello"echo $testecho "the progaram $0 is runnning"echo "the first param is $1"echo "the second param is $2"echo "total param is $*"exit 0
执行完成后结果如下
hellothe progaram ./test.sh is runnningthe first param is everythe second param is onetotal param is every one
值得注意的时,在对变量进行赋值时,等号两边都不能加入空格。
条件
判断条件命令为test命令,他可以检查一个文件是否存在,两个字符串是否相等,两个表达式是否相等。最简单的检查一个检查一个文件是否存在的脚本程序如下:
if test -f 123.txtthen...fi
具体的判断方式如下:
判断字符串:
- string1 = string2 两个字符串相同则结果为真
- string1 != string2 两个字符串不同则结果为真
- -n string 字符串不空则结果为真
- -z string 如果字符串为空则结果为真
算数比较:
- exp1 -eq exp2 如果两个表达式相等则结果为真
- exp1 -ne exp2 如果两个表达式不等则为真
- exp1 -gt exp2 如果1大于2则为真
- exp1 -ge exp2 如果1大于等于2则为真
- exp1 -lt exp2 如果1小于2则为真
- exp1 -le exp2 如果1小于等于2则为真
- !exp 如果表达式为假则结果为真,反之亦然
文件条件测试:
- -d file 如果文件是一个目录则为真
- -f file 如果文件时一个普通文件则结果为真
- -g file 如果文件的set-group-id位被设置则结果为真
- -r file 如果文件可读则结果为真
- -s file 如果文件大小不为0则结果为真
- -u file 如果文件的set-user-id位被设置则结果为真
- -w file 如果文件可写则结果为真
- -x file 如果文件可执行则结果为真
条件控制结构
如何使用上述判断语句呢,与其他基本语言类似,shell有一组自己的控制结构可以对各种条件进行使用与判断
1. if语句:
if conditionthen statmentselse statmentsfi
或者是这样:
if conditionthen statmentselif statmentselse statmentsfi
2.for语句
for viriable in valuesdo statementsdone
例子:
for foo in bar fud 43do echo $foodone
3. while语句:
while condition do statementsdone
4. until语句:
until conditiondo statementsdone
函数
首先从一个基本的例子了解函数的使用方法
#!/bin/shfoo(){ local sample="local variable" echo "Fun foo is executing" echo $sample_test return 0}foofoo_return="$(foo)"echo $foo_returnif foo then echo "false"else echo "true"fiexit 0
其中,foo_return=”$(foo)”可以抓取函数foo中echo的值,并且函数通过return返回值。
local用于在函数内申请局部变量,局部变量在函数退出时失效。
常用shell命令
- break 用于跳出for,while,until循环
- : 空命令,用于简化条件逻辑,相当于true,while : 相当于实现了一个无限循环
- contine 用于跳出此循环执行下一次循环
- eval 对参数进行求值
- export 将作为它参数的变量导出到子shell中,并使之在子shell中有效。
- printf 在终端打印信息
- set 为shell设置参数变量,将输出结果分离
- expr expr命令将它的参数当做一个表达式来求值。常见用法是执行简单的数学运算。类似于$((…))
eval命令的例子
#!/bin/shfoo=10x=fooeval y=$fooecho $yexit 0
printf 变量的例子(与C语言类似)
printf "%s\n" hello
set变量的例子:
echo the data is $(date)set $(date)echo The month is $2exit 0
expr命令
x=$(expr $x + 1)
$((…))扩展
x=0while test "$x" -ne 10do echo $x x=$(($x+1))doneexit 0
- Linux系统编程学习笔记(5)-基本shell脚本编程
- Linux shell 脚本编程学习笔记(echo)
- 【Linux 系统编程】shell 脚本基础学习(一)
- Linux shell编程学习笔记(三) 脚本参数
- Linux-Shell脚本编程-学习-3-Shell编程-shell脚本基本格式
- Linux系统shell脚本编程(四)
- Linux-Shell脚本编程-学习-1-Linux基本命令
- Linux-Shell脚本编程-学习-2-Linux基本命令
- 【笔记】Linux shell脚本编程
- shell脚本编程学习笔记(1)
- Shell脚本编程学习笔记
- Shell脚本编程学习笔记
- Linux学习(八):shell脚本编程
- linux学习笔记-学生信息管理系统(shell编程)
- linux系统-shell编程-几个shell脚本
- Liunx 命令行与shell脚本编程大全 第八章学习笔记(Linux系统的包管理基础)
- linux历程--shell脚本基本编程
- linux-shell脚本编程基本用法1
- JAVA中的反射机制
- 关于log4j和slf4j的使用说明
- python linkedhashset 简单实现,使用OrderedDict
- 微信公众号支付(二)下单支付
- javax.xml.ws.Service 报错The constructor Service(URL, QName, WebServiceFeature[]) is undefined的解决方案
- Linux系统编程学习笔记(5)-基本shell脚本编程
- Linux:内存
- babel配置,这个真详细--
- Spring JdbcTemplate方法详解
- JSON语法
- plsql连接库时报错ORA-12514,ORA-28547
- Error getting authority: Error initializing authority: Could not connect: No such file or directory
- 如何实现Java程序发送邮件
- php中的整数和浮点数