一、什么是shell?
读者应该都知道计算机只认识由0和1组成的机器码,但是这些机器码对于我们一般来来说实在是太难记忆了。为了方便人与计算机进行交流,就是使用命令解释器。在Linux操作系统中,这个解释器就叫shell。
其实当一个用户以命令行方式登录Linux操作系统之后即进入了shell应用程序,shell的功能就是将用户输入的命令翻译成Linux内核(Kernel)能够理解的语言,这样Linux的内核才能真正地操作计算机的硬件。
总结:shell就是人与计算机沟通的桥梁,可以将shell看成用户与内核之间的一个接口,它通过接收并解释用户输入的命令,然后将它们传给内核,最后由内核执行这些命令。
二、bash
在Linux操作系统中存在许多种shell,一开始出现有bsh ---> csh ----> ksh ----> zsh ---> tcsh。
最后出现了Bourn-Again,简称bash,实际上的标准Linux shell。bash 与 bsh 兼容,同时加入了csh、ksh和tcsh的一些有用功能。
cat /etc/shellls :可以查看Linux系统中的所有shell。默认的shell 就是bash。
三、 type+命令:识别bash的内置命令
L;inux操纵系统的命令分为两大类:一类是内部命令即内置在bash中的命令,一类是外部命令。外部命令是以可执行的方式存储在Linux的文件系统中的。
四、Bash变量
类型
几乎所有的编程语言都有变量的概念,Bash当然也不例外。说道变量就少不了说一说类型。但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串。说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算。但其是通过一些运算符,表达式或者命令将字符串视作整数处理的,其本质还是字符串。
新建变量
Bash中的变量和其他脚本语言一样,都是无需声明,直接拿来用的。所以变量的第一次出现都是伴随着初始化的。
取用变量
变量前加一个 $ 符号。
a="hello world"
echo $a
初始化/赋值
Bash中的变量由于无需声明,所以第一次出现都会伴随初始化。Bash中的变初始化(或赋值)方式共有三种:直接赋值、读取输入和命令替换。
(1)直接赋值:直接赋值就是使用一个等于号了,这在其他编程语言里也很常见,比如:
a=123
b=abc
c=‘123’
d=“hello world”
注意:需要注意的是等号左右不能有空格!!!有其他语言编程经验的程序员,可能经常通过增加空格来使代码变得美观。然而这在Bash中是不允许的。
(2)读取输入:读取终端的输入给变量赋值,就是使用read命令。read和echo一样都是内嵌命令。直接看代码:
echo -n "Please Input your name:"
read name
echo "Hi,$name,welcome to uncle Jelly's cabin!"
或者可以使用read命令的 -p 选项来简化上述代码:
read -p "Please Input your name:" name
echo "$name,welcome to uncle jelly's cabin!"
(3)命令替换:这是非常实用的一种初始化或赋值的方式。利用其他命令的输出来给一个变量赋值。这需要用到反引用符号` `
注意:这是数字键1左边的符号,可不是单引号。
dir=`pwd`
tim=`date`
echo "我在$dir目录下"
echo "现在时间是$time"
除此之外,还有另外一种命令替换的格式——$( )
比如上面的内容可写作
dir=$(dir)
tim=$(date)
两种替换方式的区别在于:
1、` `内部需要进行转义才能嵌套使用命令替换如a=`cmd1 `cmd2``,是错误的,需要a=`cmd1 \`cmd2\``。而$()可以直接a=$(cmd1 $(cmd2))。
2、此外一些其他特殊字符,在` `内部也需要转义。
五、Shell echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。
1.显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo It is a test
2.显示转义字符
echo "\"It is a test\""
结果将是:
"It is a test"
同样,双引号也可以省略
3.显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh read name echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出
4.显示换行
echo -e "OK! \n" # -e 开启转义 echo "It is a test"
输出结果:
OK! It is a test
5.显示不换行
#!/bin/sh echo -e "OK! \c" # -e 开启转义 \c 不换行 echo "It is a test"
输出结果:
OK! It is a test
6.显示结果定向至文件
echo "It is a test" > myfile
7.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
输出结果:
$name\"
8.显示命令执行结果
echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014
六、Shell printf 命令
我们学习了 Shell 的 echo 命令,现在我们来学习 Shell 的另一个输出命令 printf。
printf 命令的语法:
printf format-string [arguments...]
参数说明:
- format-string: 为格式控制字符串
- arguments: 为参数列表。