Linux脚本编程

        前面那一讲本来有写下的,但是他的那些链接工具不是我常用的,有三个samba,TFTP,NFS,感兴趣的可以去下载一下。

        我用的是下面这两款,之前看那个韦东山的资料下载的,觉得好用就一直用了,但是TFTP这个挺有用的,后面我也会再下载一个。

0.前言

        在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工具。shell不仅是一种命令语言,也是一种程序设计语言。用户可以通过shell编程来实现大量的任务自动化,shell擅长系统管理任务,尤其适合那些易用性,可维护和便携性的要求高的任务。

1.shell常用命令

常用shell命令
echo "some text"将文字内容打印在屏幕上
ls文件列表
wc -l file计算文件行数
wc -w file计算文件中的单词数
wc -c file计算文件中字符数
cp sourcefile destfile文件复制
mv oldname newname重命名或者文件移动
rm file文件删除
grep 'pattern' file在文件内搜索字符串,eg:grep 'xxxx' file.txt
cat file.txt输出文件的内容打印在屏幕上面。
file somefile获取文件类型
read var提示用户输入,并将
sort file.txt对file.txt文件进行排序
uniq删除文本中出现的行列。eg:sort file.txt | uniq
expr进行数学计算 expr 3 "+" 2
find       搜索文件
tee         将数据输出到标准输出设备(屏幕)和文件上 sommecommand | tee outfile
basename file返回不包含路径的文件名
dirname file返回问价所在的路径
head file打印文本文件开头几行
tail file打印文本文件末尾几行
sedsed是一个基本的查找替换程序
awkawk用来从文本文件中提取字段

2.特殊字符

  1. #:用于注释,表示该行是注释内容,不会被执行。
  2. ;:用于分隔命令,可以在一行中执行多个命令。
  3. &:用于在后台运行命令,让命令在后台执行而不阻塞当前终端。
  4. &&:用于连接两个命令,只有当第一个命令执行成功时,才会执行第二个命令。
  5. ||:用于连接两个命令,只有当第一个命令执行失败时,才会执行第二个命令。
  6. |:用于管道,将一个命令的输出作为另一个命令的输入。
  7. >:用于重定向输出,将命令的输出保存到指定的文件中,如果文件不存在则创建,如果文件存在则覆盖原有内容。
  8. >>:用于追加输出,将命令的输出追加到指定的文件中,如果文件不存在则创建,如果文件存在则追加内容。
  9. <:用于重定向输入,将指定文件的内容作为命令的输入。
  10. ():用于子shell,可以在括号内执行一组命令,并返回最后一个命令的退出状态。
  11. $:用于变量引用,表示取变量的值。
  12. *:用于通配符,表示匹配任意数量的字符。
  13. ?:用于通配符,表示匹配任意单个字符。
  14. []:用于条件测试,可以检查文件类型、字符串比较等。
  15. {}:用于代码块,可以定义一组命令的集合,通常与case语句一起使用。
  16. $(command):用于命令替换,将命令的输出作为另一个命令的参数。
  17. \:用于转义特殊字符,使其失去特殊含义。
  18. ' ':用于单引号,表示字符串字面量,不会对其中的变量进行解析。
  19. " ":用于双引号,表示字符串字面量,会对其中的变量进行解析。
  20. $():用于算术表达式求值,可以计算数学表达式的结果。

 3.变量和参数

3.1变量替换 

        变量名表示变量的值保存的地方,引用变量的值称为变量替换。如果num1是一个变量名那么$num1,就是引用该变量的值,即这个变量包含的数据。

3.2变量赋值

        用"="给变量进行赋值,"="的左右两边不能有空白符。

3.3 bash变量无类型

        不同于其他编程语言,bash不以"类型"区分变量。本质上说,bash变量是字符串,但是根据环境的不同,bash允许变量有整数计算和比较操作,其中决定因素是变量的值是否只含有数字。

对变量进行操作:

#!/bin/sh
a="helle world!!"   #对变量进行赋值
echo "A is:"        #cout a
echo $a

给脚本文件增加权限并运行

有时候我们需要打印数字加字母的组合形式,eg:this is the 2nd

我们需要给一个变量,这个时候为了保证变量的复用性,肯定不能直接赋值为2nd,可以采用花括号的形式来告诉shell需要打印谁的变量

#!/bin/sh
a="2"
echo this is the ${a}nd

3.4局部变量

        局部变量只在代码块或者一个函数里有效。如果使用local来声明变量,那么他只能在该变量声明的代码块中可见。eg:

#!/bin/bash
hello="var1"
echo $hello
function func1(){
    local hello="var2"
    echo $hello
}
func1
echo $hello

3.5位置参数

        命令行传递给脚本的参数是$0,$1,$2,$3,$4....,$0是脚本的名字,$1是第一个参数,后面的以此类推,参数$9以后的参数必须使用括号括起来 ${10}.....

        特殊变量$*和$@是表示所有的位置参数

eg:

#!/bin/sh
echo "number of vars:"$#
echo "number of vars:"$*
echo "number of var1:"$1
echo "number of var2:"$2
echo "number of var3:"$3
echo "number of var4:"$4

 

3.6 退出和退出状态

        exit命令一般用于结束一个脚本,就像C语言的exit一样。他也能返回一个值给父进程。每个命令都能返回一个退出状态(有时候也看作是返回状态)如果一个命令执行成功,则返回0,如果执行不成功则返回一个非0的值。同样的脚本里的函数和脚本自身都会返回一个退出状态码。在脚本或者函数里被执行的最后一个命令将决定退出状态码。如果第一个脚本以不带参数的exit命令结束,那么脚本的退出状态码将会是执行exit命令前的最后一个命令的退出状态码。脚本结束时,没有exit命令,有不带参数的exit命令和exit$?命令三者是等价的。

        $?变量保存了最后一个命令执行后的退出状态。当一个函数返回时,$?变量保存了函数中最后一个命令的退出状态码,这就是bash里函数返回值的处理办法。当脚本运行结束,$?保存了脚本的退出状态,按照惯例0表示执行成功,1-255表示执行失败。

#!/bin/bash
echo hello
echo $?
lskdf
echo $?
echo
exit 113
           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值