目录
shell的概念
1.概念:
将人的语言转换成计算机的二进制,交给计算机内核处理,再把二进制转换成人类能识别的语言。
shell在中间,相当于解释器的作用
2.shell的种类
Linux系统的shell的种类:
(1)bash:Linux默认的shell
(2)tcsh:整合了csh的功能,提供比csh更强大的功能
(3)csh:类似c语言的shell
(4)sh://已经被bash替换
(5)nologin:也是shell的一种类型,禁止用户登录。
3.查看shell
查看当前系统版本包含的所有shell: cat /etc/shells
查看用户登录默认的shell:cat /etc/passwd //除非指定,默认都是bash
4.脚本的概念
是扩建语言,也可以理解为动态语言,也是一种编程语言。可以控制软件应用程序。脚本都是以文本形式保存,就是执行文本当中的特定命令。只在调用时才会进行解释或者编译。
特点:按行执行
5.shell脚本的构成
第一类:开头,注明解释器,#!/bin/bash #!/usr/bin/python
第二类:执行语句,都是系统支持的命令格式。只要系统能够执行的语句(包含第三方的扩展命令),都可以作为执行语句。
第三类:注释语句,#作为注释,注释的代码,不会被执行。
默认的脚本格式名称:xxx..sh(约定俗成)
6.脚本执行的方式
1.不需要赋予执行权限就可以执行:
source:点命令,也是一个符号,是bash的内部命令,自带的,主要作用就是读取文件当中的可执行命令,然后会加载到shell中,不用重启。
2.赋权执行:执行权限
想要执行都需要先赋予执行权限
对文件进行赋权方法:
chmod +x 文件
chmod 777 first.sh
执行方法:
这两种方式都必须要有执行权限。
(1) ./:相对路径执行,.表示当前目录,只能在当前目录下执行
(2) /opt/firsh.sh 绝对路径执行,表示可以在其他目录也可也执行
这是生产当中的主要执行方式,工作中都是赋权执行,sh和source只限于调试阶段。
都是以绝对路径来执行的。脚本都是和定时任务结合使用的
crontab -e
7.重定向与管道操作:
重定向操作
重定向输出:
(1) >:把指定结果保存到文件中,会覆盖原有内容
echo 456 > 123
(2) >>:会在当前的内容的尾部追加,不覆盖原有的内容
echo 135 >> 123
重定向输入:
(1)<: 从指定文件读取数据,也可也理解为免交互
setenforce 0关闭安全机制
passwd --stdin dn < 123 从指定123文件当中的内容作为dn用户的修改密码
从指定321文件当中的内容作为wc时的内容:
重定向错误输出:
(1) 2>:将错误信息保存到指定文件,也会覆盖原有的内容
(2) 2>>:将错误信息保存到指定文件,不会原有内容
混合输出:
(1) &>:标准和错误都保存到文件当中,会覆盖原有的内容
8.shell变量的作用以及类型
变量:变量需要有范围和类型。用户指定变量(自定义变量)
自定义变量:用户指定需要的参数
变量的类型:
(1)int 整数
(2)string:字符串
(3)布尔:true false
(4)浮点:1.12 0.23
变量名的类型:
固定名称,用户自定义,系统预设
自定义的要求:
(1)不用使用linux系统的操作命令或者系统命令来指定变量名,
(2)不要用中外文
(3)不能使用特殊符号开头,例如¥#^&*,但是可以使用_开头!!!
(4)最好使用名称的英文来指定变量名,例如computer,student
(5)注释,注释的目的:1.解释一下你的代码用途 2.万一你离职了,后面的人好交接。
如何自定义变量:
变量名=变量值(变量名是区分大小写的)
查看变量值:echo $abc
一次性查看多个变量值:echo ${AA}${aa}
赋值的时候,引号的作用:
(1) ``(波浪线按键的点):反撇号
作用:命令替换,把命令执行的结果,赋值给变量名
(2) ' ':单引号
作用:强引用,用单引号打印变量,只会输出变量名,不会输出变量的值,只会打印变量的名称,当成普通字符串。
(3) " ":双引号
作用:弱引用,打印变量的赋值
删除变量:
unset 变量名
只读变量:
1.只读变量不能重新赋值
2.只读变量不能删除 //如果要删除,要么重启,要么从脚本里删除
read 通过命令来获取变量:
read -p " " x
x:变量名,一定要有
" ":提示内容,一定要有,什么都不写也可以
-p:指定提示符,提示用户输入数据
变量的作用范围:
默认情况下,新定义的变量只能在当前的shell中生效,也可也为局部变量
全局变量:在程序和脚本中以及全部的shell环境中都可以被引用
export //临时声明,只能在当前shell中生效,重启失效
export c=100
export d=200
想要其他shell也生效,需要写到/etc/profile文件中(/root/.bashrc_profile,/root/.bashrc,这两个只能对root用户生效),修改完后要source一下/etc/profile文件!!!!
一般不这么设置,一旦有重命名,就非常麻烦,可能导致未知的不确定性,难以调试。
环境变量:
介绍:系统提前创建好的,后者人工添加额,主要的作用就是用来设置用户的工作环境。比如配置系统行为,传递信息,控制程序执行。
种类:
(1)系统环境变量:所有人都可见,都可用
查看系统的环境变量路径:echo $PATH
(2)用户级环境变量:只能对当前用户开放和使用
指定查看用户级环境变量路径:echo $HOME echo $USER echo $PWD
$USER:表示用户名称
$HOME:表示用户的宿主目录
$PWD:表示当前所在的目录
$PATH:表示可执行程序的默认路径
如何添加一个目录到环境变量中
位置变量:
介绍:也叫命令行参数,脚本运行时,从外部传递变量值,让脚本来运行,可以根据需要来进行处理
$n:
n:表示的是数字 1 2 3 4 5 6 7 8 9 ${10},${11}也就是说10以上的参数要用花括号来表示。
sh weizhi.sh 10 20
$0 $1 $2
从$1一直传到$11
预定义变量:
介绍:编程语言或者脚本解释器提供的,可以自动设置,而且是可以自动更新的,但是由编程语言和脚本解释器自动完成的,人工不能修改。
(1)$*,$@:表示命令和脚本需要处理的参数,两者有区别,
$*:加引号时,会把参数当成一个整体,不加引号,会把参数分别处理
$@:加不加引号都会把参数分开处理
$*和$@在不加引号时,都会把参数分开处理。
(2)$#:统计传递给脚本参数的个数
(3)$?:表示一条命令或者脚本执行后的返回码,返回码是0,表示执行正确。所有非0的返回码,都表示执行错误。
$?只能返回上一次,最近的一次的命令或者脚本执行的返回码。
9.整数运算
符号:
+:加法
-:减法
*:乘法
/:除法
%:取余
写法:
(1)i=$(($a+$b)) i=$(($12+$15)) 引用变量前,一定要加$
(2)expr 引用变量前,一定要加$
除了乘法前需要加一个\,其他都一样。
(3)i=$(12*5) 引用变量前,一定要加$
(4)let i=12*5 引用变量前,一定要加$
自增自减:
i++:先赋值,再加一
i--:先赋值,再减一
++i:先加再赋值,自加1
--i:先减再赋值,自减1
i+=2 每次自加2,先赋值,再加2
10.简易计算器bc
bc:
是一个简易的计算器,也可也支持运算,可以支持整数运算,也可以支持非整数运算。