zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    jq实现多级手风琴效果
    css弹性盒布局
    css兼容处理
    bootstrap--双日历插件
    char*,string,char a[], const char *,之间的转换
    8.Maximum Depth of Binary Tree
    7. Minimum Depth of Binary Tree-LeetCode
    6. Reverse Linked List 逆转单链表
    5.Maximum Product Subarray-Leetcode
    卷积神经网络(Convolutional Neural Networks)CNN
  • 原文地址:https://www.cnblogs.com/sailfan/p/13495326.html
Copyright © 2011-2022 走看看