Linux——脚本01——shell特性
一、基本概念
感觉shell和java、C一样,也是一种高级程序设计语言,
遵循java语法规范写出的文件叫***.java;
遵循shell语言规范写出的文件叫***.sh,也叫做脚本,这种脚本 (script )一般是短小的、用来让计算机自动化完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的;
第一个是绝对路径: /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
- 命令自动补齐功能:tab键;
- 命令历史记忆功能:上下键等;
- 命令别名:alias
- 快捷键:crtl R(寻找历史快捷键);ctrl D(就是退出的意思和logout一样);CTRL A(将光标移到命令的最前面);CTRL E(将光标一道命令的最后面);CTRL U(撤销命令行);CTRL K(撤销光标前面的);
- 前后台作业控制:tty(查看当前终端);screen(定位上一次会话);
&( 这个用在一个命令的最后,可以把这个命令放到后台执行,例:
crtl c(结束某个前台进程或者说作业);ctrl z(将一个正在执行的命令挂起);jobs(查看有多少个在后台运行的作业); fg %jobnumber(将后台中的命令调至前台继续运行);bg %number(将一个在后台暂停的命令,变成继续执行)pct &)
- 输入输出重定向:> >> < <<,他们主要是输出、追加输出、输入、追加输入;下图很有意思,首先我们知道,cat命令主要用于标准输入并打印,那么我们使用cat <<EOF >file2就可以把eof里的内容输出到file2里,这样新建一个文件是不是比touch命令更加方便;
- 多个命令排序:如果要在一行输入多个命令,必须可以用 ;隔开,但是;无逻辑判断,只能顺序执行; && 短路与,前面为0则不执行,前面为1则执行; || 短路或,前面为0则执行,前面为0则不执行;
- shell元字符(通配符):特别要注意的是转义符 \ ,它可以转义很多命令,比如 参数分隔符空格、回车键,当它转移空格时会使参数分隔符空格成为一个普通的字符串;当它转义回车时,会换行;举例:touch yang.txt shen.txt时创建两个文件分别是‘yang.txt'和’shen.txt‘ ,但如果touch yang\ shen就只创建了一个文件,文件名叫作 'yang.txt shen.txt'。
注意:学了那么多命令,别把这三个弄混了;
(3)echo和printf
- 使用echo带有颜色的输出文本;
30m——39m是改变字体颜色;40m——49m是改变背景颜色;
举例:echo -e "\e[1;32m **************** \e[0m" 例子解释:-e参数表示如果要打印的化有特殊字符则执行;\e[1;32以绿色方式打印文本;\e[0m回到默认颜色;