Linux——脚本01——shell特性


一、基本概念

感觉shell和java、C一样,也是一种高级程序设计语言,

遵循java语法规范写出的文件叫***.java;

遵循shell语言规范写出的文件叫***.sh,也叫做脚本,这种脚本 (script )一般是短小的、用来让计算机自动化完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的; 

动态程序一般有两种实现方式,一是二进制方式,一是脚本方式。 二进制方式是先将我们编写的程序进行编译,变成机器可识别的指令代码(如.exe文件),然后再执行。这种编译好的程序我们只能执行、使用,却看不到他的程序内容。脚本简单地说就是一条条的文字命令,这些文字命令是我们可以看到的(如可以用记事本打开查看、编辑),脚本程序(如.bat文件)在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。
 
java、c等是程序设计语言,可以通过编译成一个程序,例.exe;
shell等是命令行语言,可以写一个脚本,让操作系统自动执行命令,例.bat;

 

 

 

 

 

第一个是绝对路径:  /root/scripts/ping01.sh

第二个是相对路径:./ping01.sh

permission denied,主要是由于没有赋予x(可执行)权限。

 

 

  • shell是一个命令解释器,bash是shell的改进版,其他改进版还有ksh、csh等;
  • ~表示用户的家;
  • #       :注释;
  • #!   :(shebang)默认用哪个解释器执行;如果用户明确表示使用哪个解释器执行了,则以用户为准。

 

程序由 逻辑+数据 组成;

机器码可以被cpu直接运行,所以C巡行效率最高;但是,它的平台可移植性就差了,因为不同的CPU是采用不同的指令集的,不同的指令集处理相同的机器码时结果相差很大。

java被编译成字节码,虽然cpu不能识别字节码,但是由于字节码在jvm虚拟机上运行,所以平台独立。

 

 

<<-EOF     ........EOF命令:

这个命令主要是用来在脚本文件中共存两个语言的;

比如先使用shebang默认为bash解释器,然后可以使用 <<-EOF     EOF命令暂时调用python解释器;

 

 

bash 脚本文件

./脚本文件

都是在子shell中执行的

 

.   脚本文件
source  脚本文件
都是在当前shell中执行的

shell命令:在shell下写的命令就是shell命令; 

 

 

二、shell特性

(1)login与nologin

 

 

  • 用户在登录(ssh连接或者输入su - 命令)的时候回执行这四个配置文件:/etc/profile    /ect/bashrc    ~/.bash_profile    ~/.bashrc
  • 用户在退出(输入exit命令)的时候会执行这两个配置文件:~/.bash_logout    ~/.bash_history
注:假如我们在/.bash_logout文件里配置了一句命令:reboot,那么在我们exit的时候,这个操作系统会重启;因为用户在推出的时候会执行两个配置文件

 

  • 用户登录时使用su - 命令和su命令不同;su - 命令会执行4个配置文件,切换成一个不同的shell环境供用户使用;而su命令只执行两个配置文件,不切换shell环境。

 (2)Bash shell

  1. 命令自动补齐功能:tab键;
  2. 命令历史记忆功能:上下键等;
  3. 命令别名:alias 
  4. 快捷键:crtl R(寻找历史快捷键);ctrl D(就是退出的意思和logout一样);CTRL  A(将光标移到命令的最前面);CTRL E(将光标一道命令的最后面);CTRL U(撤销命令行);CTRL K(撤销光标前面的);
  5. 前后台作业控制:tty(查看当前终端);screen(定位上一次会话);

     &( 这个用在一个命令的最后,可以把这个命令放到后台执行,例:pct &)

    crtl c(结束某个前台进程或者说作业);ctrl z(将一个正在执行的命令挂起);jobs(查看有多少个在后台运行的作业);   fg %jobnumber(将后台中的命令调至前台继续运行);bg %number(将一个在后台暂停的命令,变成继续执行)
  6. 输入输出重定向:>  >>  <  <<,他们主要是输出、追加输出、输入、追加输入;下图很有意思,首先我们知道,cat命令主要用于标准输入并打印,那么我们使用cat <<EOF >file2就可以把eof里的内容输出到file2里,这样新建一个文件是不是比touch命令更加方便;
  7.  多个命令排序:如果要在一行输入多个命令,必须可以用     ;隔开,但是;无逻辑判断,只能顺序执行;                                                                                                                                                             && 短路与,前面为0则不执行,前面为1则执行;                                                                                                                                                                                                                                       ||    短路或,前面为0则执行,前面为0则不执行;
  8. shell元字符(通配符):特别要注意的是转义符 \ ,它可以转义很多命令,比如 参数分隔符空格、回车键,当它转移空格时会使参数分隔符空格成为一个普通的字符串;当它转义回车时,会换行;举例:touch yang.txt shen.txt时创建两个文件分别是‘yang.txt'和’shen.txt‘ ,但如果touch yang\ shen就只创建了一个文件,文件名叫作 'yang.txt shen.txt'。
注意:学了那么多命令,别把这三个弄混了; 

 

(3)echo和printf

  1. 使用echo带有颜色的输出文本;

            30m——39m是改变字体颜色;40m——49m是改变背景颜色;

            举例:echo -e "\e[1;32m **************** \e[0m"           例子解释:-e参数表示如果要打印的化有特殊字符则执行;\e[1;32以绿色方式打印文本;\e[0m回到默认颜色;

 

 

颜色输出和echo一样,也要加\033[1;32m和\033[0m,然后这两个东西还要再“”里,不然识别不出来;

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                   

posted @ 2020-08-07 12:00  Eric-Shen  阅读(555)  评论(0编辑  收藏  举报