shell是什么
1、双向的把人类语言转换成计算机可识别的二进制语言,把计算机语言转换成人类可识别的语言
2、shell介于人和计算机中间作为解释器的存在
shell脚本:执行文本当中的特定命令
扩建语言,动态语言,也是一种编程语言,
对应用程序进行控制,脚本都是以文本形式保存。只在调用时才进行解释或编译
按行执行
linux系统中的shell的种类:
bash:linux默认的解释器
tcsh:整合了csh的功能,可以提供比csh更强大的功能
csh:类似于c语言的shell
nologin:禁止用户登录
查看系统自带的shell命令:cat /etc/shells
查看用户登录的shell:cat /etc/passwd (不指定,默认都是bash) cat /etc/passwd | grep root
shell脚本构成:
//开头// 注明解释器 ,默认解释器可以不写 #!/bin/bash/ #!/usr/bin/python
//执行语句// :执行语句,都是系统支持的执行语句。只要系统能够执行的语句,包含第三方扩展的命令,都可以作为脚本的执行命令
//注释语句//以#作为注释,注释的代码将不会被执行
脚本执行的三种方式:
不需要赋予执行权限就可以执行
sh
source:点命令,是bash的内部命令,自带的,读区文件中的可执行命令然后会加载到shell中,不用重启直接生效
//赋权执行//:chmod+x chmod 777 [
chmod 777 [脚本名称] ./ //相对路径执行,只能在当前目录下执行//
/opt/ 脚本名称] // 绝l's对路径执行//
两种方式都需要有执行权,以绝对路径执行是生产中的主要方式 sh source 只限于调试阶段
脚本一般是和定时任务配合使用crontabe -e
分时日月周 /opt/first.sh
重定向输出 >
把指定结果保存到文件中,会覆盖原有内容
重定向输入 < 要把setenforce 0 关掉
从指定文件中读取内容,面交互
重定向输出 >>
会在当前文本内容尾部增加,不会覆盖当前文本内容
重定向错误输出
2>
将错误信息保存到指定文件中,会覆盖原有内容
2>>
将错误信息保存到指定文件中,b不会覆盖原有内容
混合输出 &>
标准和错误都会保存到指定文件中,会覆盖原有内容
管道符 |
把前一个命令输出的结果(文本内容)作为后一个命令的参数(操作对象)
shell变量
变量的作用:用来存放系统和用户需要使用的特定参数(值)
变量:可以改变的类型和范围。
用户指定变量(自定义变量)
自定义变量:用户指定需要的参数
变量的类型:
int:整数
string :字符串
布尔:true false
浮点:小数
变量名:
固定名称、用户自定义、默认原则:
1、不用linux系统的操作命令或者系统命令指定变量名
2、不用中文作为变量名
3、不用特殊字符作为变量名 _可作为开头
4、最好使用名称的英文来指定变量名
5、注释,解释代码用途,万一离职可以交接
定义变量:
[变量名]=[变量值] 变量名区分大小写
查看变量值:1254
echo $[变量名] echo${ab}${ac}避免出现歧义
只读变量:
readonly [变量名]
不能重新赋值,不能被删除
删除变量:
unset [变量名]
赋值的时候 引号的作用:
`
[反撇号]命令替换,把命令执行 的结果赋值给变量名
' '
[单引号]强引用:用单引号打印变量只会输出变量名称,不会输出变量值。不会引用变量真实的值
" "
[双引号]弱引用:打印变量的赋值(一般使用双引号)
在赋值的时候’‘ 和''''没有区别
通过read命令来获取变量
-p[指定提示符]、提示用户输入提示信息
默认的情况下,新定义的变量只能在当前环境下使用
全局变量:export //声明全局变量
在程序和脚本中以及全部的shell环境中都可以被引用。一旦有重命名会非常麻烦,难以调试
临时声明,只在当前shell中,重启失效
/etc/profile
/root/.bashrc_profile
/root/.bashrc 只对root用户生效
环境变量
系统提前创建好,或者人工添加的,用来设置用户的工作环境。配置系统行为,传递信息,控制程序执行
系统环境变量: //所有人都可见,都可用,可以直接识别,直接控制
用户级环境变量://只对当前用户开放
echo &HOME //用户的宿主目录
&USER //表示用户名称
$PWD //表示当前所在的目录
$PATH //可执行的默认路径
位置变量
命令行参数,脚本运行时从外部传递变量值,让脚本来运行,可以根据需要来进行处理
$n :n 表示的是数字 1 2 3 4 5 6 7 8 9 ${10} 10以上的参数需要用花括号来表示
$0(表示命令本身) $1$2(表示从左往右依次赋值) 要在脚本执行时在脚本外部传入变量值
预定义变量
编程语言或者脚本解释器提供的,可以自动设置,可以自动更新的,但是由编程语言和脚本解释器自动完成,人工不能修改
$*
$@ //表示命令和脚本需要处理的参数
$* $@ 在表现形式上有区别 在不加引号时表现一至
$*加引号时会把参数当成一个整体,不加引号会分别处理
$@加或不加引号都会把参数分开处理
$#统计传递给脚本的参数的个数
$?表示一条命令或者脚本执行后的返回码 返回码是0表示执行正确 所有非0的返回码都表示执行错误
$?只能返回上一次、最近一次命令或脚本执行的返回码
整数运算
只能用于整数,不带小数点
+-*/ %取余
i=$((12+15))
i=$(expr 12\*5)表示乘法
i=$[12*5]
let i=12*5
引用变量前面要加$符号
i++ :i=$(($i+1))先赋值,再加1。
i-- :先赋值再减
i+=2每次自加2,先赋值再加2
++i:先加再赋值,自加1
--i:先赋值再减1,自减1
bc简易的计算器
echo 2+8 | bc
可以进行小数运算
实验:从$1到$11,传参