什么是shell?
shell是把人的语言转换成计算机的二进制语言交给计算机的内核处理
shell在中间作为解释器,翻译的功能
linux系统的shell种类:bash,tcsh,csh
bash:linux默认的shell
tcsh:整合了csh的功能,提供了比csh更多更强大的功能
nologin:禁止用户登录,也是shell的一种形式
cat /etc/shells:查看能用哪些shell
cat /etc/passwd:查看用户使用的shell
除非指定,默认的shell都是bash。
什么是脚本,为什么叫脚本语言
脚本:扩建语言,动态语言,也是一种编程语言,控制软件应用程序
脚本都是以文本形式保存,只在调用时才会进行解释或者编译
脚本语言按行执行,执行文档当中的特定命令。
shell脚本地构成
第一类:开头 注明解释器, #!/bin/bash #!/usr/bin/paython
第二类:执行语句,都是系统支持地命令格式,只要系统能够执行地语句,包括第三方扩展命令,都可以作为执行语句。
第三类:注释语句 #:作为注释,注释的代码,不会被执行
默认的脚本格式名称:...sh 以 .sh作为文件后缀名
脚本执行的三种方式:不需要赋予执行权限就能执行sh和source
source:点命令,也就是一个符号“ . ” 是bash自带的内部命令,读取文件当中的可执行命令
然后会加载到shell中(切换到目标目录),不用重启直接生效
赋权执行:执行权限 chmod+x ,chmod 777
相对路径执行:“ ./ ” " . " 表示当前目录
绝对路径执行:“ / ” 例:/opt/first.sh
这两种方式都必须要有执行权限,这是生产当中的执行方式。
工作当中都是赋权执行,sh和source只限于调试阶段,都是以绝对路径了执行的
例:crontab -e
* * 1 * * /opt/first.sh
source first.sh 定时任务和脚本配合在一起使用
重定向与管道符
管道符:“ | ” 把前面的命令作为后面命令的操作对象
重定向操作:
重定向输出 > 把指定结果保存到文件中,覆盖原有的内容
例:echo 123 > 456 ls查看可以直接看到456,cat 456才可以看到123 123组为输入,输入进456当中
重定向输入:<,从指定文件读取数据,也可以理解为免交互
passwd - - stdin dn < 123 把123中的文本作为密码重定向输入,修改
一定要关闭安全机制 setenforce 0
重定向输出: >> 会在当前内容的尾部追加,不覆盖原有的内容
重定向错误输出: 2> 将错误信息保存到指定文件,也会覆盖原有内容(用的少)
2>> 将错误信息保存到指定文件,不会覆盖
混合输出:&> 将标准和错误都保存在文件中,他会覆盖原有内容·
shell变量的作用类型:
变量可以改变,有类型和范围,变量需要有范围和类型,用户指定变量(自定义变量)
想干什么,就定义出想干的事情到底是什么 如加法,减法,还有数字
自定义变量:用户指定需要的参数
变量的类型:int:整数 string :字符串 布尔:true或false 浮点:小数
变量名:固定名称、用户自定义、系统预设
用户自定义变量名要求:
1、不要使用linux系统的操作命令或者系统命令来指定变量名
2、不要用中文作为变量名
3、不能使用特殊字符开头,下划线 _ 除外
4、默认原则,最后使用·名称为英文来指定变量名
5、注释,注释的目的是作为解释代码用途
怎么定义变量(写一个变量)
变量名=变量值 变量名是区分大小的 aa=test AA=test1
查看变量的值:echo $变量名 如:echo $aa
或 echo $AA$aa →更好的表达方式 echo ${AA}${aa}
例:
只读变量:1、不能重新赋值 2、只读变量不能删除
例:
赋值时,引号的作用,三种引号
1、反撇号 `(在键盘上和~在一起)
反撇号的作用:命令替换,把命令执行的结果赋值给变量名
例:
a=`ps aux | grep root`
echo $a
2、双引号 “ ”
双引号的作用:弱引用,打印变量的赋值
例:echo "$a"
3、单引号 ‘ ’
单引号的作用:强引用,用单引号打印变量名只会输出变量名,不会输出变量的值
例:echo '$a' 打印出来的就是$a,不会打印出变量的值
总结:单引号和双引号只有打印时有区别,在赋值时没有区别
read命令来获取变量:
read -p:指定提示符,提示用户输入数据
例:
a,b是给变量起的变量名,一定要有否则会报错
变量的作用范围:默认情况下新定义的变量只能在当前的shell中生效,也可以叫局部变量
全局变量:在程序和脚本中以及全部的shell环境中都可以被引用
export:声明全局变量,零时声明
缺点:一旦有重命名就会非常麻烦,可能会导致未知的错误而且难以寻找
永久声明要写在配置文件中
自定义变量结束,下面来到环境变量
环境变量:系统提前创建好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行。
系统环境变量:echo $PATH(所有系统环境变量的路径) 所有人都可见,可用
用户环境变量:只能对当前用户开放使用 echo $HOME 用户的宿主目录
$USER:表示用户名称 $PWD:表示当前所在目录 $PATH:可执行程序的默认路径
位置变量:也叫命令行参数,脚本运行时,从外部传递变量值,让脚本来运行,可用根据需求来进行处理
$n:n表示的数字 1,2,3,4,5,6,7,8,9 10及以上的参数要用{ }来表示
同时也有$0:表示整个命令本身 如sh wz.sh
例:
即$1=10 $2=20 从左往右依次赋值,要在脚本执行时,在外部传入变量值
预定义变量:编程语言或者脚本语言解释器来提供的,可以自动设置,可以更新的,但是由编程语言或者脚本解释器自动完成的,人工不能修改。
$* , $@:表示命令和脚本需要处理的参数
$*:加双引号时会把参数当成一个整体来处理
不加双引号会把参数分开处理,在打印体现在参数是否在一行
$@:加不加双引号都会把参数分开处理
$#和$? :
$#:统计传递给脚本的参数的个数
例:
$?:表示一条命令或者脚本来执行后的一个返回码,返回码为0则表示执行正确,不为0则是执行不正确
并且$?只能返回最近的一次命令或者脚本执行的返回码
整体运算:i=$(($a+$b)) 或 特殊的 i=$((10+15))
几种运算符 + - / * %(表示取余数)如 i=$((6%4)) echo $i 得到2 6除4余2
expr expr: i=$(expr 12\*5)
echo $i
引用变量前一定要加$
i++ i=$(($i+1)) 先赋值,再加 i=1 i=1+1 i=2+1 每次自加1
i-- 每次自减1 先赋值再减
i+=2 每次自加2 先赋值,再加2
++i 先加再赋值,自加1
--i 先减再赋值,自减1
bc:简易的计算器,可以支持运算,也可以进行小数运算
例: