什么是shell?
其主要作用为:
shell将人类的语言转换为计算机可识别的二进制语言;
之后交移至内核(CPU)处理;
再通过shell将处理好的二进制语言转化为人类可以识别的语言。
总结:shell在人类与计算机之间起到了翻译、解释的作用。
Linux系统中shell的种类
bash:Linux默认的shell
tsch:整合了csh的功能,并且提供比csh更强大的功能
csh:类似C语言的shell
nologin:其也是shell的一种
。。。。
查看当前系统中包含的默认shell:cat /etc/shells
什么是脚本?
脚本:扩展语言、动态语言,其也是一种编程语言;控制软件应用程序;
脚本都是以文本的方式保存,只在被调用时才会进行解释或编译。
脚本语言的特点:
按行执行;
执行文本当中的特定语言命令。
shell脚本的构成
一、开头:注明解释器。默认bash,可以不写。除此之外要特定注明
二、执行语句:其都是系统支持的命令格式,只要是系统能够执行的命令语句,其中包含第三方的命令
三、注释语句:以“#”开头,表示此行标注为注释,注释的代码不会被执行
脚本执行的三种方式
分为两大类:
(先写一个简单的脚本)
无需赋权即可执行:
sh
source
点命令,其是一个符号,是bash的内部的命令,系统自带的读取文件当中的可执行命令,然后加载到shell中,特点:不用重启,直接生效
需要赋权执行 ------------- chmod +x 、chmod 777
./~~.sh ---------- 相对路径执行,使用前提:要在当前目录下
/~/~~.sh ----------- 绝对路径执行,从根目录出发
重定向的操作
重定向输出 -------- ">" 将指定的结果保存到指定文件中,特点:会覆盖原有内容
重定向输入 -------- "<" 从指定的文件中读取内容,例:passwd --stdin xxx < 123.txt(表示读取123.txt中的内容设置为用户xxx的密码)
重定向输出 -------- ">>" 在当前内容尾部追加内容,特点:不会覆盖原有的内容
重定向错误输出 -- "2>" 将错误信息保存到指定的文件中,特点:会覆盖文件原有的内容
重定向错误输出 -- "2>>"将错误信息保存到指定的文件中,特点:不会覆盖指定文件的原有内容
重定向混合输出 -- "&>"标准的信息和错误信息会一并保存到指定的文件中,特点:会覆盖指定文件原有内容
变量
变量需要有范围和类型 ----- 用户指定变量(此变量为自定义变量)
自定义变量:指用户指定所需的参数
变量的类型:
int:整数类型 string:字符串类型 布尔类型:true、false 浮点类型:0.2、1.1 -- 即小数类型
变量名:分为 固定名称、用户自定义名称、系统预设名称
自定义变量的特点:
1、切记不要用Linux系统的操作命令或者是系统命令来指定变量名
2、不要用中午定义变量名
3、不能用如*~&#等特殊符号作为变量名的开头,但除了"_"(下划线)
4、Linux系统的默认原则,最好使用指定变量名的英文名来指定
5、注释:目的 -- 1.解释代码的用途;2.方便后续交接
怎么定义一个变量
定义一个变量名 = 一个变量值
变量名特点:区分大小写;
查看变量
单个变量 ---- echo $ 变量名
多个变量 ---- deho $ ${变量名}${变量名}
创建只读变量
readonly 变量名
只读变量的特点:不能被修改,不能被删除(注:无论什么用户)
删除只读变量只能使用特殊命令 ---- urset 变量名
赋值时各种引号的作用
`` 反撇号 --- 命令转换;将命令执行的结果,赋值给变量
‘ ’ 单引号 --- 强引用;只会输出变量名,而不会输出变量值;只打印变量名
“ ” 双引号 --- 弱引用;会打印出变量的值
read 命令获取变量
-p:指定提示符 --------- 提示用户输入变量
语句: read -p “提示内容” 变量名
默认情况下,新定义的变量只能在当前的shell中生效,也可以叫局部变量
也就是说,当在一个端口创建局部变量后,同时再开启另外一个端口,再新开的端口中,变量失效
export --- 声明全局变量
所有新定义的变量都是临时的变量,永久变量需要声明在/etc/profile中
同理在 /用户名/bashrc_profile 、 /用户名/.bashrc 中也可以声明对单个用户的永久变量
环境变量
系统提前创建好的变量、或人工添加的变量
作用:用来设置用户的工作环境:如,设置系统行为,传递信息,控制程序的停止、运行
分类:
系统环境变量 ---- 所有人都可见、都可用的变量;
查看系统环境变量: echo $PATH
用户环境变量 ---- 只对当前用户开放、使用;
查看用户环境变量:echo $PWD
$USER ---- 用户名称
$HOME ---- 用户宿主目录
$LANG ---- 语言和字符集
$PWD ---- 当前所在工作目录
$PATH ---- 可执行程序的默认路径
位置变量
命令行参数;当脚本运行时,从外部传递变量值,从而让脚本运行,可以很具需要来进行处理
$n:n 表示位置数字 --- 当n=1~9时可以直接用$n表示 、当n>9 时需要添加“{}”,如${11}
$0:表示命令本身
执行后:
预定义变量
编程语言或脚本编辑器自动完成,人工不能对其进行修改
特点:可自动设置,可自动更新;但只能由编程语言或脚本编辑器自动完成,人工不能修改
$* 、$@:表示命令或脚本需要处理的参数
$*:加双引号,把参数作为一个整体进行处理,不加双引号,则分别处理
$@:加或者不加双引号,都会把参数进行分别处理
$#:统计传递给脚本参数的个数
$?:表示一条命令或者脚本执行后的返回码,返回0表示执行正确,返回任何非0值都表示执行错误
返回的是上一次运行的,即最近的一次命令或者脚本执行的返回码(无需自行判断,机器自动按预先配置好的逻辑判断输出 -------- 不要你以为,要我(机器)以为)
变量的整数运算
注:仅限于整数
基本算法:加:+ 、减:- 、乘:* 、除:/ 、取余:%
计算方式:
i=$(($a+$b)) 、i=$((5+6))
expr : i=$(N + - / % n) 特殊:expr的乘法 --- i=$(expr N \* n)
i=$[$a+$b]
let i=$a*$b
自加自减运算符
i++ 先对i进行赋值,然后在进行加运算(相当于 i=$(($i+1)) )
i-- 先对i进行赋值,然后在进行减运算 (相当于 i=$(($i+1)) )
i+=1 相当于 i=$(($i+1))
++i 先对i做加运算,结果在赋值给i
--i 先对i进行做减运算,然后结果在赋值给i