shell基础知识

shell介绍

shell,俗称壳,工作在操作系统的最外层,负责将外围程序翻译为计算机识别的二进制程序,同时将计算机生成的结果返回给外围程序。
注意:外围程序中有需要通过shell解释的程序,也有不需要通过shell解释的,直接与内核进行交互的。

编程语言的介绍

编程语言可以分为2大类。分别是高级语言和低级语言。
低级语言(面向机器的语言)又分为2种:机器语言和汇编语言
高级语言(接近自然语言)又分为2种:静态编译型语言和动态解释型语言
静态编译型语言:C,C++,java
动态解释型语言:php,perl,python,shell

shell脚本

概念:就是将linux命令放在文件夹中,然后可以通过程序去执行这些命令的程序文件就称为脚本文件
注意事项:
用户自定义变量:
#!/bin/bash:含义是告诉脚本使用的哪一种命令解释器
shell的程序后缀名一般以sh结尾。例如C语言结尾就是.cpp,java语言结尾是java一样。
$name是${name}的简化版本,简化之后,当我们出现歧义的时候,我们还是需要使用${name}

shell脚本的4种执行方式,掌握其中的几种即可,其他作为了解。
当前目录的shell脚本:./test.sh(需要执行的权限x)
bash test.sh 或者 sh test.sh
source test.sh
sh < test.sh 或者 cat test.sh|sh  或者 cat test.sh | bash

一般语言的第一次使用都是hello,world,我们shell也可以尝试一下。

#!/bin/bash
echo "hello world"
echo "shell study"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

shell变量

注意事项:
shell等号2边不能有空格
变量的调用使用$
2种不同的分类方式
1按照变量的作用
2按照变量的作用范围
作用分类解释
用户自定义变量用户自己定义的变量
环境变量操作系统的数据
位置参数变量脚本传递参数
预定义变量bash中已经自定义好的变量名字
作用范围解释
局部变量用户变量+位置参数变量+预定义变量
全局变量环境变量

变量的分类有2种,但是本质是一样的,我们在这里详细说一下按照作用分类的变量

用户自定义变量

#变量的简单使用
[root@aaa shell]# var1=12
[root@aaa shell]# echo $var1
12
#${name}和$name的使用
[root@aaa shell]# var2=mysql
[root@aaa shell]# echo $var2
mysql
[root@aaa shell]# echo $var2db.log
.log
[root@aaa shell]# echo ${var2}db.log
mysqldb.log

等号两边不能留有空格
在这里插入图片描述
单引号和双引号的区别:单引号之间的内容原封不动赋值给变量, 双引号之间的内容如有特殊符号会保留它的特殊含义
unset 来删除当前设置的用户自定义的变量
在这里插入图片描述

由于系统时间错误而导致的tar包警告

[root@break ~]# tar -zcvf etc.tar.gz /etc/*
[root@break ~]# date -s "2012-1-1"
2012年 01月 01日 星期日 00:00:00 CST
[root@break ~]# date
2012年 01月 01日 星期日 00:00:02 CST
[root@break ~]# tar -zxvf etc.tar.gz -C /opt/
[root@break ~]# cd /opt/
[root@break opt]# ls -al
总用量 12
drwxr-xr-x.   5 root root   38 1月   1 00:00 .
dr-xr-xr-x.  17 root root  224 11月 14 2018 ..
drwxr-xr-x  136 root root 8192 1月   1 00:00 etc
drwxr-xr-x.   2 root root    6 9月   7 2017 rh
##可以看到,由于我们将时间设定太早,使得当前系统的时间,晚于文件的mtime时间。
##文件可以正常解压,但是会出现时间戳是未来的信息。
解决办法:让系统时间去读取硬件的时间。
hwclock -s

出现的问题
在这里插入图片描述

环境变量

在开头,我们说过,环境变量属于全局变量。剩余的3种变量属于局部变量。是因为环境变量的值不会随着shell的消失而消失。
但是在环境变量中,仍然还区分局部变量和全局变量。但是他们的意思和之前完全不同。
这里的局部变量是指仅在自己的进程下起作用。全局变量是指对shell会话和自己的子shell都生效。
环境变量的临时设置:export,仅仅在当前shell中生效,另外打开一个shell执行就会失败
环境变量的永久设置:修改存储环境变量的文件,有4个。可以设置永久生效的bash

环境变量的配置文件

文件内容
/etc/profile系统全局环境和登录系统的一些配置
/etc/bashrc用于自定义shell
/root/.bashrc单独定义某个用户的bash
/root/.bash_profile用户单独自定义某个用户的系统环境

实战:模拟远程登录中的木马程序的加载

如果我们这几个配置文件中进入了木马程序,我们每次远程登录的时候就会加载木马程序
如果在这几个配置文件中增加第三方程序bin的设置,可以全局调用这个第三方程序
在这里插入图片描述
局部变量
在这里插入图片描述
env:用来查看当前的环境变量
在这里插入图片描述
export:用来让一个变量变为当前shell的全局变量

#在子进程中无法访问到父进程中的局部变量,经过export可以暂时使得q为当前shell的全局变量
[du@break ~]$ q=1
[du@break ~]$ vim q.sh 
[du@break ~]$ sh q.sh 

[du@break ~]$ cat q.sh 
#!/bin/bash
echo $q
[du@break ~]$ export q
[du@break ~]$ sh q.sh 
1

位置参数变量

$0  获取当前执行shell脚本的文件文件名,包括脚本路径,命令本身
$n  获取当前脚本的第n个参数 n=1,2.....n 当n大于9时 用${10}表示。
$*	所有参数
$# 	参数的个数
$$ 当前进程的PID
$? 显示最后命令运行的状态,0正常
$! 后台运行的最后一个进程的PID

在这里插入图片描述
预定义变量

env中的一些环境变量
PATH
PWD
HOME

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值