shell基础

一、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
  

打印结果见下图:

image.png

 

原文地址:https://www.cnblogs.com/sailfan/p/13495326.html