shell
shell的定义:
把人类的语言转换成计算机的二进制,计算机内核处理,二进制转换成人类能识别的语言。(shell在人与计算机的中间,充当解释器)
Linux系统中shell的种类
1,bash :Linux系统中默认的shell
2,tcsh :整合了csh的功能,可以提供比csh更强大的功能
3,csh :类似c语言的shell
4,nologin :禁止用户登录
cat /etc/shells :查看系统中默认的shell
除非指定,系统默认的shell都是bash'
脚本的定义:
扩建语言,动态语言,也是一种编程语言,控制软件应用程序,脚本都是以文本的形式保存,只在调用时才会进行解释或者编译,按行执行,执行文本当中的特定命令
shell脚本的构成
1,开头,注明解释器,#!/usr/bin/python
2,执行语言,都是系统支持的命令格式,只要系统能够执行的语句(包含第三方的扩展命令),都可以作为执行语句
3,注释语句,#号键作为注释,注释的代码,不会被执行
默认的脚本格式名称:xxx.sh
shell脚本执行的三种方式:
不需要赋予执行权限就可以直接执行
1,sh:只在子shell中执行
2,source:点命令,也就是一个符号. sh是bash的内部命令,自带的,读取文件当中的可执行命令,会加载到shell中,不用重启,直接生效
3,赋权执行: chmod +x
chmod 777
./ :相对路径执行, .表示当前目录
/ :绝对路径执行
无论相对还是绝对,都必须要有执行权限,这是生产当中的主要执行方式。
工作当中都是赋权执行,sh和source只限于调试阶段
crontab -e :定时
重定向与管道操作
重定向操作:
重定向输出:> ,把指定结果保存到文件中,覆盖原有的内同
重定向输入:< ,从指定文件当中获取数据,免交互
重定向输出:>> ,会在当前的内容的尾部追加,不会覆盖原有的内容
重定向错误输出:2>,将错误的信息保存到指定文件,也会覆盖原有的内容
重定向错误输出:2>>,将错误的信息保存到指定文件,不会覆盖原有的内容
混合输出:&>标准和错误都保存到文件当中,会覆盖原有的内容
shell变量的作用和类型
变量:可以改变,有类型和范围
变量需要有范围和类型。用户指定变量(自定义变量)
自定义变量:用户指定需要的参数。
变量的类型:
1,int 整数
2,string 字符串
3,true false 布尔类型
4,1.12c 0.23 浮点类型
变量名:固定名称,用户自定义,系统预设
1,不要使用Linux系统的操作命令,或者系统命令来指定变量名
2,不要用中文指定变量名
3,不能使用特殊符号开头,可以用_开头
4,默认原则:最好使用名称的英文来指定变量名
5,注释,注释的目的 1,解释一下你的代码用途,2,离职之后后面人好交接
怎么定义变量:
变量名=变量值
变量名区分大小写的
查看变量的值
echo $aa
echo ${AA}${aa}
.
只读变量:readonly
1,只读变量被不能重新复制
2,只读变量不能删除
删除变量:unset
赋值的时候,引号的作用,只有打印的时候有用
1,`` :反撇号,命令替换,把执行命令的结果,赋值给变量。
a=`ps aux | gerp root`` 命令替换
2,'' :单引号,强引用,用单引号打印变量,只会输出变量名 ,不会输出变量值,只会打印变量的名称
echo '$a'
3,” ” : 双引号 ,弱引用,打印变量的赋值。
read命令来过去变量:
-p :指定提示符,提示用户的
""必须要有,且后面要有空格
变量的作用范围:
默认情况下,新定义的变量只能在当前的shell环境中生效,也可建议叫做局部定量
全局变量:在程序和脚本中,以及全部的shell环境中,都可以被应用
生效全局变量的方式:
export :查看当前系统中所有的全局变量
export a=100
export b=200
工作中不常用全局,因为一旦有重名,非常麻烦,可能导致未知的不确定性,难以调试
export 临时生效,只能当前的shell中,重启失效
vim /etc/profile
/root/.bashrc_profile
/root/.bashrc 只能对root用户生效
环境变量:
系统h之前提前创建好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行
系统环境变量:所有人都可见的,都可用
echo $PATH :所有的系统环境变量
用户级环境变量:只能对当前客户使用
echo $HOME :看所有用级
$USER :表示用户的名称
$HOME:用户的宿主目录
$PWD:表示当前所在的目录
$PATH:可执行程序
位置变量:命令行参数
脚本运行时,从外部传递变量值,让脚本来运行,可以根据需要来进行处理
$n :n表示1.2.3.4.5.6.7.8.9 ${10},10以上的参数要用花括号来表示
${11}
sh weizhi.sh 10 20
$0对应命令本身
$1 $2从左往右依次进行赋值,要在脚本执行时,在外部传入变量值
预定义变量:
编程语言或者脚本解释器提供,可以自动设置,自动更新,但是编程语言和脚本解释器自动完成,人工不能修改
$* $@ :表示命令和脚本需要处理的参数
$* :加引号时(用双引号),会把参数当成一个整体处理,不加引号,会把参数分别处理
$@ :加不加引号都会把参数分开处理
$* $@z :在不加引号时,都会把参数分开处理
$#:统计传递给脚本的参数的个数a
$? :表示一条命令或者脚本执行后的返回码,返回码为0,表示执行正确,所有非0的返回码,都表示执行错误。(只能返回上一次,最近的一次命令或者脚本执行的返回码)
整数运算:
i=$(12+15)
i=$(expr12*5)
%:取余
expr
let i=12*5
i=$[125] let i=125 i=$((12+15))
i++ i=$(($i+1)) 先赋值,再加 i=1 i=1+1 i=2+1 每次自加1 i-- 每次自减1 先赋值再减 i+=2 每次自加2 先赋值,再加2 ++i 先加再赋值,自加1 --i 先减再赋值,自减1
bc简易计算器:
也可以支持运算,整数小数都可以