一、shell是什么
自然界
shell: (蛋、坚果、某些种子和某些动物的) 壳; 壳状物; 炮弹;
计算机
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。(摘自百度百科)
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。图形化界面和命令行都是shell(w3c菜鸟教程)
二、bash shell和shell的区别
1、我们平时所说的shell为bash shell,为sh shell的升级版。
2、shell和bash shell 的关系, 举个例子: shell为一系列浏览器,而bash shell为谷歌浏览器,bash shell为当前最流行的shell,如果没有特指,我们平常所说的shell就默认指的是bash shell。
3、cat /etc/shells 查看当前计算机已经安装的shell,shell就像一个软件,可以安装新的,可以卸载旧的,也可以切换,echo $SHELL查看当前选中的shell。
4,bash 没有提供类似java,python的类库和模块,它只能调用本系统的命令,所以严格来说:shell就是一堆命令的堆积,它不算是一门编程语言,因为每一个机子所安装的shell有可能不同,比如centsos6 的有些命令在centos 7 上可能就有变化,所以它也不是跨平台的语言。
三、特性
面向过程编程: c,python、bash 等等
面向对象:java、 c++、python 等等
bash完全为面向过程。
四、变量
1、bash shell(以下全部简称shell),定义变量默认全是str类型。
name=liuwf
name="liuwf"
age=18
注意,等号之间不要加空格,别问为什么,就是这个规定的
2、export name=liuwf(定义全局变量),还有其他很多方式定义全局变量,有兴趣可以去了解。
3、unset 删除变量,ps. unset name(注意:bash没有提供java python类型的垃圾销毁机制,必须手动回收对象,否则时间长了会占满内存)
4、nums=(29 100 13 8 91 "ererer") 弱类型, 所以在一个数组中可存放任意类型
5、字符串操作
1、拼接字符串: str1=$name$url
2、echo ${name:1:2} 截取字符串
3、${#str} 获取字符串长度
6、位置参数
1、$0 代表命令本身, $1-$9代表顺序参数编号,大于10的话使用括号,如${10}
2、 $* 把所有参数当作整体 $@ 把每个参数分开对待(它俩的功能一致,都是获取全部变量)
3、$# 参数的个数
4、$?获取上一个命令执行是否失败,失败返回非0
7、shebang机制
”Shebang”或者”Sha-bang”。长期以来,Shebang都没有正式的中文名称。Linux中国翻译组的GOLinux将其翻译为“释伴”,即“解释伴随行”的简称,同时又是Shebang的音译。(摘自w3c教程),如果非要问shebang汉字怎么写的话(这种人一律按照sb处理)。
ps.
#!/bin/bash
#!/bin/python
8、逻辑运算
&& 短路与
|| 短路或
!非
ps. ls /opt && echo "success" || echo "failure" 这行命令会打印success, 因为 ls /opt && echo "success"为真, 所以直接导致echo "failure" 不会执行。
9、运算
介绍最常见的一种:
(())
ps. i=1, j=2,echo k=$(($i+$j)) 打印结果为k=3
还有其他很多种运算的方式,有兴趣可以自己去了解。
10、执行顺序控制(此处只介绍if)
if condition
then
statement(s)
fi
ps.
read a read b if (($a==$b)) then echo "a和b相等" fi
11、 循环
for((exp1; exp2; exp3))
do
statements
done
ps.
sum=0 for ((i=1; i<=100; i++)) do ((sum += i)) done echo "The sum is: $sum"
12、函数
function_name () {
list of commands
}
ps.
Hello () { echo "Hello World $1 $2" return 10 } Hello liuwf Ail echo $?
注意:1、shell的 函数参数是以位置变量的形式传参的。
2、shell并非python,没有强制缩进。
13、最后举个栗子
打印一下九九乘法表
1 ######################################################################### 2 # File Name: test.sh 3 # Author: liuwf 4 # mail: afan6203@126.com 5 #Created Time:Mon 10 Aug 2020 06:48:38 PM CST 6 ######################################################################### 7 #!/bin/bash for i in `seq 1 9` do for j in `seq $i` do echo -n "$i*$j=$[i*j]" done echo done
打印结果见下图: