shell基础
shell是一个命令解释器:把用户输入的命令给操作系统的核心(可以是交互也可以是非交互)
gcc编译器:将人类理解的语言翻译成机器理解的语言
shell脚本:把原来linu命令或语句放在一个文件中,然后通过这个程序文件去执行时,我们就说这个程序为shell脚本或shell程序;我们可以在脚本中输入一系统的命令以及相关的语法语句组合,比如变量,流程控制语句等,把他们有机结合起来就形成了一个功能强大的shell脚本
shell脚本:
#!/bin/bash //开头 作用:告诉脚本使用的那种命令解释器。
#echo this is shell
echo “hello word”
mkdir /tmp/test
touch /tmp/test/a.txt
chmod +x 刚才创建的shell名称 //给一个可执行的权限
执行 ./shell.sh
shell脚本以.sh结尾
创建shell的步骤:
1.创建一个包含命令和控制结构的文件
2.修改这个文件的权限使它可以执行 chmod + x test.sh
3.检测语法错误
4.执行 ./example
shell脚本的执行方式
1./root/test.sh 或者 ./test.sh (当前路径下执行脚本的话要有执行权限chmod +x)
2.bash test.sh 或 sh test.sh(这种方式可以不对脚本文件添加执行权限)
3.source test.sh (可以没有执行权限)
4.sh<test.sh 或者 cat test.sh|sh(bash)
shell变量及运用。
变量是一种传递数据的方法。变量是用来代表每个值得符号名,我们可以把变量当成一个容器,通过变量,可以在内存中储存数据。也可以在脚本执行中进行修改
shell 变量设置规则
1.变量名称通常以大写字母,它可以由数字、字母(大小写)和下划线_组成,变量名区分大小写;但是注意变量名称不能以数字开头
2.等号两把不能有空格
3.变量储存得数据类型是整数值和字符串值
4.在对变量赋予字符串值时,建议用括号将其括起来。如果字符串中存在空格符号,需要使用单引号和双引号括起来
5.要对变量进行调用,可以在变量名称前加美元符号$
6.如果需要增加变量得值,那么可以进行变量值得叠加。不过变量需要用双引号包含
变量分类:
1.用户自定义变量
2.环境变量:这种变量中主要保存得是和系统操作环境相关得数据
3.位置参数变量“:这种变量主要是用来向脚本当中传递参数或这数据得,变量名不能自定义,变量作用是固定得
4.预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定得
变量作用域分成2类:全局变量(环境变量,不会随shell消失而消失)和局部变量
1.在终端定义一个变量VAR1=123
调用:echo $VAR1
variable //变量
2.变量值的叠加:
${name}
3.命令的替换:$()或者反引号
date是显示时间或着设置时间
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号
<+时间日期格式>:指定显示时,使用特定的日期时间格式。
date +"%Y -%m -%d %H:%M:%S"
年 月 日 时 分 秒
注:%y年份只显示两位,%Y显示四位
$(date)调用函数
find /root/ -name *.txt //去root下边找.txt的文件
4.命令嵌套:
(
(
(( ))
特殊变量:
1.单引号和双引号的区别:
在单引号中所有的字符包括特殊字符(KaTeX parse error: Undefined control sequence: \) at position 6: ,",'和\̲)̲都将解释成字符本身而成为普通字…,",'和\以外所有的字符都解释成字符本身,拥有“调用变量的值”、“引用命令”和“转义字符”的特殊含义
注意:\是转义的意思,在\后边的将失去任何意义,变成了普通字符
删除一个变量:unset $var1
环境变量:
在bash shell中,环境变量分为两类:全局变量和局部变量
全局变量:对于shell会话和所有的子shell都是可见的
局部变量:它只在自己的进程当中使用 (bash b.sh //执行
b.sh时,会使用另一个bash去执行,就访问不到变量的值)
pstree // 查看树
env //查看全局变量
export //设置全局变量,可以写入
让变量永久生效:
可以把定义好的变量写入配置文件中
当登录系统或新开启一个ssh连接来启动bash进程时,一定会加载这4个配置文件:
vim /etc/profile #系统全局变量和登录系统的一些配置
vim /etc/bashrc #bash全局自义配置文件,用于自定义bash
vim /root/bashrc #用于单独自定义某个用户的bash
vim /root/.bash_profile #用户单独自定义某个用户的系统环境
将文件后面加一个echo /etc/profile #后面加上他的目录
***注意:可以在这里写木马程序,管理员登录之后,就可以触发木马程序 ***
ehco 'touch /tmp/profile.txt' >> /etc/profile
echo 'touch /tmp/bash_profile.txt' >> /root/.bash_profile
追加写入程序,可以在文件里面执行成功touch
/tmp/bash_profile.txt 这一段命令
export VAR9=123 #等号两边不能有空格
source /etc/profile #重新加载profile文件
设置PATH环境变量
PATH变量是用来定义bash查找命令的目录,安装第三方程序后,可以把第三方程序bin目录添加到这个path路径内,就可以在全局调用这个第三方程序
例如:
在一个目录下边写一个备份
vim /opt/z1
#!/bin/bash
echo '123456' //内容
chmod +x /opt/z1 //给一个执行权限
z1 //直接去执行不能直接执行
将z1命令添加PATH中
PATH=/opt/:$PATH
z1 //发现可以执行成功了
vim /etc/profile //在文件后面追加一下内容 永久生效》》
export PATH=/opt/:$PATH
source /etc/profile //加载一下文件,使配置文件生效
shell位置变量(图):
shell解释执行用户的命令时,将命令行的第一个字符作为名字,而其它字符作为参数。
$0 获取当前执行shell脚本的文件文件名,包括脚本路径,命令本身
n
获
取
当
前
脚
本
的
第
n
个
参
数
n
=
1
,
2
,
.
.
.
.
n
当
n
大
于
9
时
用
n 获取当前脚本的第n个参数n=1,2,....n当n大于9时 用
n获取当前脚本的第n个参数n=1,2,....n当n大于9时用{10}表示
/etc/init.d/network restart //服务器启动传参数
shell特殊变量(图):
有些变量是一开始执行script脚本时就会设定,且不能被修改,但我们不叫他只读的系统变量,而叫它特殊变量。这些当一执行程序时就有了
常用的环境变量(图):
echo $HOME //输出家目录
echo $PATH //输出执行路径
echo $PEW //输出当前路径
#数学运算符
expr命令
1.正确输出为1,错误输出0
expr 2\ >5 //要比较2是否大于5,大于号前边要加一个转义符,如果正确输出1,错误输出2
2.字符串
expr length “ni hao” //求一个字符串的长度,空格也算一个字符
expr substr “ni hao” 2 4 //取一个字符串,从第二个字符开始的位置取四个字符串 》》i ha
3.