前面那一讲本来有写下的,但是他的那些链接工具不是我常用的,有三个samba,TFTP,NFS,感兴趣的可以去下载一下。
我用的是下面这两款,之前看那个韦东山的资料下载的,觉得好用就一直用了,但是TFTP这个挺有用的,后面我也会再下载一个。
0.前言
在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工具。shell不仅是一种命令语言,也是一种程序设计语言。用户可以通过shell编程来实现大量的任务自动化,shell擅长系统管理任务,尤其适合那些易用性,可维护和便携性的要求高的任务。
1.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 | 打印文本文件末尾几行 |
sed | sed是一个基本的查找替换程序 |
awk | awk用来从文本文件中提取字段 |
2.特殊字符
#
:用于注释,表示该行是注释内容,不会被执行。;
:用于分隔命令,可以在一行中执行多个命令。&
:用于在后台运行命令,让命令在后台执行而不阻塞当前终端。&&
:用于连接两个命令,只有当第一个命令执行成功时,才会执行第二个命令。||
:用于连接两个命令,只有当第一个命令执行失败时,才会执行第二个命令。|
:用于管道,将一个命令的输出作为另一个命令的输入。>
:用于重定向输出,将命令的输出保存到指定的文件中,如果文件不存在则创建,如果文件存在则覆盖原有内容。>>
:用于追加输出,将命令的输出追加到指定的文件中,如果文件不存在则创建,如果文件存在则追加内容。<
:用于重定向输入,将指定文件的内容作为命令的输入。()
:用于子shell,可以在括号内执行一组命令,并返回最后一个命令的退出状态。$
:用于变量引用,表示取变量的值。*
:用于通配符,表示匹配任意数量的字符。?
:用于通配符,表示匹配任意单个字符。[]
:用于条件测试,可以检查文件类型、字符串比较等。{}
:用于代码块,可以定义一组命令的集合,通常与case语句一起使用。$(command)
:用于命令替换,将命令的输出作为另一个命令的参数。\
:用于转义特殊字符,使其失去特殊含义。' '
:用于单引号,表示字符串字面量,不会对其中的变量进行解析。" "
:用于双引号,表示字符串字面量,会对其中的变量进行解析。$()
:用于算术表达式求值,可以计算数学表达式的结果。
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