什么是shell?
把人的语言转换成计算机的二进制,计算机内核处理,二进制转换成人类能识别的语言
shell在中间,解释器,翻译官
linux系统的shell种类:
bash:linux默认shell
tcsh:整合了csh的功能,可以提供比csh更强大的功能
csh:类似c语言的shell
nologin:也是shell的一种类型,禁止用户登录
cat /etc/shells 查看当前系统的自带的shell
/etc/passwd 可以查看用户默认的shell,除非指定,默认都是bash
什么是脚本,为什么叫脚本语言?
扩建语言,动态语言,也是一种编程语言
控制软件应用程序,脚本都是以文本形式保存
只在调用时,才会进行解释或者编译
按行执行
执行文本中特定的命令
shell脚本构成
cd /opt vim first.sh
第一类:开头注明解释器, #!/bin/bash(默认)#!/usr/bin/python
第二类:执行语句都是系统支持的命令格式,只要系统能够执行的语句(包含第三方的扩展命令),都可以作为执行语句
第三类:注释语句#作为注释,注释的代码,不会被执行
默认的脚本格式名称:xxx.sh
脚本执行的三种方式:
不需要赋予执行权限的就可以执行的
sh source 一般只限于调试阶段
例如:sh first.sh
source first.sh
source点命令,也就是“.”,是bash的内部命令,自带的读文件当中可执行的命令,然后会加载到shell中,不用重启,直接生效
赋权执行:执行权限
chmod +x /chmod 777
chmod 777 first.sh
./first.sh 相对路径执行,“.”表示当前目录(必须在当前目录)
/opt/first.sh 绝对路径执行(可以不在当前目录执行)
**这两种都是需要赋予执行权限的,工作中一般都是从绝对路径中执行
脚本都是和定时任务来执行的
crontab -e * * * * * /opt/first.sh
重定向操作
重定向输出:> 把指定结果保存到文件中,覆盖原有的内容 echo 123 > 123
重定向输入:<从指定文件读取数据,也可以理解为面交互
例如 passwd --stdin dn < 123但是这个操作需要关安全机制
重定向输出:>>会在当前内容的尾部追加,不覆盖原有的内容 echo 789 >> 123 cat 123 123 789
重定向错误输出:2>,将错误的信息保存到指定文件,也会覆盖原有的内容
2>>,将错误的信息保存到指定文件,不会覆盖原有的内容
输入错误信息才有效 比如ehco(输入错误的命令)
混合输出&>,标准和错误都保存到文件当中,会覆盖原有内容
变量:可以改变,类型,和范围
计算器;变量需要有范围,类型, 用户指定变量(自定义变量)
你想干什么就得选定义出你要干的事情到底是什么,算法定义数字
自定义变量:用户指定需要的参数
变量的类型:int整数 string字符串 true false布尔 1.12 0.23浮点(小数)
变量名:固定名称,用户自定义,系统预设
1.不要使用linux的系统操作命令,或者系统命令来指定变量名
2.不要用中文指定变量名
3.不能使用特殊符号开头,_除外
4.有个默认原则,最好使用名称的英文来指定变量名:computer,student
5.注释,注释的目的:解释一下你的代码用途;离职,工作好交接
怎么定义变量?
变量名=变量值
直接输a=1 或者b=1 变量是区分大小写的
aa=test AA=test1
查看变量的值
echo $aa echo $AA echo $AA$aa echo ${AA}${aa}这样更安全,避免出现起义奇异
a=90
echo “卜润的成绩是:$a分”
只读变量:
stu=burun readonly stu echo $stu
1.只读变量不能重新复制,也不可以删除
删除变量
a=1 echo $a unset a echo $a
赋值的时候,引号的作用
``:反撇号,命令替换,把命令执行的结果,赋值给变量名
a=`ps -aux | grep root` echo $a
' ':单引号,强引号,用单引号打印变量,只会输出变量名,不会输出变量的值,只会打印变量的名称
“ ”:双引号,弱引用,打印变量的赋值
read命令来获取变量;-p指定要提示符,提示用户输入数据
变量的作用范围:默认情况下,新定义的变量只能在当前的shell中生效,也可以局部变量
全局变量:在程序和脚本中,以及全部的shell环境中都可以被引用
export #声明全局变量
vim /etc/profile 可以加变量
一旦有重命名,可能导致位置的不确定性,难以调试,export临时申明,只能在当前shell中使用,重启失效
1./etc/profile 都所有人
2./root/.bashrc_profile ;/root/.bashrc 只能对root用户生效
环境变量:系统提前创建好的,或者是人工添加的用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行
系统环境变量:所有人都可见,都可用
echo $PWD显示所有环境变量路径
用户及环境变量:只能对当前用户开放和使用
echo $HOME用户的宿主目录
echo $USER表示用户的名称
echo $PWD表示当前所在目录
echo $PWD可执行程序的·默认路径
添加一个目录到环境变量中(即可以自动补齐)
位置变量:命令行参数,脚本运行时,从外部传递变量值,让脚本来运行,可以根据需要来进行处理
$n:n表示的是数字,例如:1.2.3.4.5.6.7.8.9;到10及以上的参数需要用{}来表示即${10}
sh weizhi.sh 10 20 :sh weizhi.sh $0表示名本身
$1$2从左往右依次复制,要在脚本执行时,在外部传入变量值
强定义变量:编程语言或者脚本解释器提供的,可以自动设置,而且是可以更新的,但是由编程语言和脚本解释器自定义完成,人工不能修改
$* $@:均表示命令或者脚本需要处理的参数
"s*"会把参数变成一个整体 s*不加引号,则分别处理
s@加不加“”都会把参数分开处理
s#:统计传递给脚本分参数的个数
***$?:表示一条命令或者脚本执行后的返回码,返回码是0,表示执行正确,所有非0的返回码,都表示执行错误
$? 只能返回上一次,最近一次命令,或者脚本执行的返回码
整数运算
例如10+10
10.0不是整数,带小数点系统判定不是整数
+-*/%
第一种(())
第二种expr
这表示的乘法,其他一模一样,就expr类型乘法是这样
第三种[ ]
第四种 let
i++:i=$(($i+1)),先赋值,再加,再加每次自加1
i--:先赋值,再减,再减每次自减1
i+=2:每次自加2,先赋值再加2
++i:先加在赋值,自加1
--i:先减在赋值,自减1
bc,简易的计算器,可以直接运算加减乘除
可以整数
可以小数