什么是Shell
在Linux内核和用户间担任解释器,通常之/bin/bash。
shell和bash的关系就算,bash是一个具体的shell;shell有很多种,其中一个三bash。
shell的使用方式:
1.交互执行指令:人工干预,执行效率底。
2.非交互执行指令:安静地在后台执行,执行效率高,方便写脚本。
常见的shell环境
/bin/sh | unix默认shell |
/bin/bash | 大多是Linux默认shell |
/sbin/nologin | 非登陆shell |
/bin/tcsh | |
/bin/csh | |
/bin/ksh | |
/bin/source | 不产生子进程 |
一般的shell解释器在运行某个进程的时候,会在当前bash下再创建一个子进程,而所有命令循环等都是在这个子进程下面做,创建的变量也不会影响用户登录的bash进程,只影响这个子进程。
但是!source不一样,他不生成子进程,他直接在用户登录的bash下进行操作,所有命令都直接是这个bash的子进程,声明的变量对用户登录的终端有效,所以一般不用。
历史命令
history 查看历史命令
history -c 清空历史命令
> ~/.bash_history 清空记录文件
![序号] 执行第[序号]的命令
![字符] 执行以某字符开头的最近执行的命令
配置文件/etc/profile (打开终端会读取运行的脚本)
其中HISTSIZE代表最大历史命令数
重定向
> 覆盖目标文件(先清空、再写入)
>> 可实现追加重定向输出 (直接写入)
1 为标准输出,不写默认为1
2 为错误输出,2>就是把错误信息输出
& 为全部输出 等价于 >[目标] 2>&1 和&> [目标] 一个意思
管道 , 用符号 | ,可以将一条命令的标准输出交给另一条命令处理,在一条命令行内可依次使用多个管道
变量
环境变量 | 由系统定义完成,并且赋值完成,用户直接使用即可 | $USER 永远储存当前登陆的用户名 $PATH 提供命令的检索目录 $SHELL 当前解释器 $PWD 当前所在的位置(执行这个脚本终端所在位置,不是脚本的位置) $PS1 当前命令行行首如何显示 |
位置变量 | 在执行脚本时提供的命令行参数 | $1、$2、.. .. ${10}、${11}、.. ..用户输入的第n个参数 |
预定义变量 | 由系统定义完成,并且赋值完成,用户直接使用即可 | $# 已加载的位置变量的个数,求和 $* 所有位置变量的值 $? 程序退出后的状态值,0表示正常,其他值异常 |
定义变量或者赋值:变量名=变量值 ( 两边不能有空格)
使用变量中的值:$变量名
取消变量 unset [变量名]
局部变量只能对当前Shell有效,其他进程中都不能用,包括子进程
全局进程在当前Shell和该Shell的子环境都有效,注意分别shell是用bash还是source做解释器的
全局变量 :
export 变量名[=[变量值]] 把某个变量变成全局变量
export -n 变量名 取消变量全局属性
控制用户属于的信息是否在屏幕中显示
将回显功能关闭
stty -echo
将回显功能恢复
stty echo
可以在输入密码前关闭回显,等输完密码再打开回显
read:产生交互,捕捉用户在键盘上的输入,并且赋值给一个变量
-p:'屏幕提示信息'
-s:不显示用户输入的数据
循环的列表值,可以不参与,循环执行的重复操作
造数工具: {起始值..结束值} {1..50}:产生1到50之间的数字
注意点:
1.if判断中每次用到判断都要在后面加上;then 在判断结束后加上fi
2.if的开始标志是then 结束标志三fi 循环的开始标志三do 结束标志三done