Shell概述
一.Shell环境及特性
1.什么是shell
在Linux内核与用户之间的解释器程序
通常指/bin/bash
负责向内核翻译及传达用户/程序指令
相当于操作系统的”外壳”
2.Shell的使用方式
(1).交互执行指令:人工干预,执行效率底。----命令行
(2).非交互执行指令:安静地在后台执行,执行效率高,方便写脚本。
---脚本 若需要临时使用另一种Shell环境,可以直接执行对应的Shell解释器程序,
比如只要执行ksh可以切换到ksh命令行环境。
3.常见的shell程序种类
如何切换shell化境
通过usermod . Chsh .更改登录的shell
手动执行目标shell程序可以使用2个脚本验证
[root@desktop0 ~]# yum repolist //先查看yum仓库
[root@desktop0 ~]# yum -y install ksh //安装新解释器ksh
[root@desktop ~]# cat /etc/shells //显示shell程序类型
[root@desktop0 ~]# ksh
若希望修改用户的登录Shell,管理员可以直接通过usermod(或useradd)命令设置。可以使用2个脚本验证
比如,以下操作可将用户zhangsan的登录Shell改为/bin/ksh:
[root@desktop0 ~]# useradd -s /bin/ksh zhangsan //执行修改操作
[root@desktop0 ~]# usermod -s /bin/ksh zhangsan //或
[root@desktop0 ~]# grep 'zhangsan' /etc/passwd //查看修改后的zhangsan用
Bash基本特性 支持的功能
命令行环境回顾
--快捷键.Tab健补齐
--历史记录可以使用2个脚本验证
---命令别名
----标准输入输出
----重定向
-----管道操作
二.历史命令
存放位置及数量
操作历史命令
[root@desktop0 ~]# vim /etc/profile //修改HISTSIZE=10决定能保存的历史命令数量
[root@desktop0 ~]# > .bash_history //清空历史记录文件
Sh ksh
编写shell规范
1.
声明解释器 #!/bin/bash
2.脚本功能注释, #此脚本的作用,使用场所.作者等(步骤,思路.用途.变量含义等)
3.脚本内容,要执行的指令
脚本的执行方式:
- 添加x权限
- 使用bash之类的解释器读取脚本文件,比如bash test1 或者sh test1 新开子进程(解释器)
- 使用source命令读取脚本文件,比如source test1 Source可以省略为.不开启子进程(解释器)
[root@desktop0 ~]# cd /opt/
[root@desktop0 opt]# vim test1 //写一个脚本
#!/bin/bash
echo “hello world”
[root@desktop0 opt]# ls
[root@desktop0 opt]#chmod +x test1 //方法一
[root@desktop0 opt]# bash test1 //bash解释器读取文件
[root@desktop0 opt]# sh test1 //sh 解释器 读取文件
[root@desktop0 opt]# . test1 //source解释器 读取文件
hello world
可以使用2个脚本验证
#!/bin/bash //使用bash运行不会有进入123目录的效果
Mkdir /opt/123
cd /opt/123
#!/bin/bash //使用bash运行不会有任何反应,source运行会退出当前终端
写一个自动配置yum仓库的脚本
#!/bin/bash
echo ‘[abc]
name=abc
baseurl=ftp://172.25.254.250/rhel7 //真机的yum源
enabled=1
gpgcheck=0’ > /etc/yum.repos.d/abc.repo
增加安装ftp服务(vsftpd)的需求,安装好之后开启服务,且每次开机自动运行Ftp服务
#!/bin/bash
echo ‘[abc]
name=abc
baseurl=ftp://172.25.254.250/rhel7 //真机的yum源
enabled=1
gpgcheck=0’ > /etc/yum.repos.d/abc.repo
yum -y install vsftpd & > /dev/null //安装ftp服务,并将不需要的信息扔掉
systemctl start vsftpd
systemctl enable vsftpd
变量:
- 自定义变量,使用大小写字母,数字,下划线,不能以数字开头,不能使用特殊符号
- 系统变量,包含环境变量,预定义变量,大部分是系统已经定义好的,直接shiyong
- 环境变量,PWD当前位置 USER当前用户名 HOSTNAME主机名 SHELL当前 用户解释器 HOME当前 录目家的用户UID当前用户的UID号 PATH系统 命令所在地 PS1一级提示符 PS2二级提示符
列:查看当前位置使用 echo$PWD
$* 显示所有位置变量的值
$# 统计位置变量的个数
$$当前程序的进程号
$? 上一条指令的执行结果,0是正确,非0标示异常
列:
写一个脚本,可以创建abc账号并配置密码123
[root@desktop0 opt]# vim test2
[root@desktop0 opt]# cat test2
#!/bin/bash
useradd abc //创建用户是abc
echo 123 | passwd --stdin abc //密码是123
[root@desktop0 opt]# bash test2
更改用户 abc 的密码 。
passwd:所有的身份验证令牌已经成功更新。
改良:
[root@desktop0 opt]# vim test2
[root@desktop0 opt]# cat test2
#!/bin/bash
useradd $1 //创建用户是$1
echo $2 | passwd --stdin $1 //密码是$2
[root@desktop0 opt]# bash test2 natasha 321
更改用户 natasha 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@desktop0 opt]# vim test2
#!/bin/bash
useradd $1 &>> /opt/no.txt (#将提示重定向到文本中)
echo $2 | passwd --stdin $1
[root@desktop0 opt]# cat test2
全局变量 export
[root@server0 ~]# b=30
[root@server0 ~]# export b
变量值及范围控制
扩展赋值操作
区分三种定界符
- 双引号 “ “ :允许扩展,以$引用其他变量 (用来界定范围)
- 单引号’ ‘ : 禁用扩展,即便$也视为普通字符 (用来界定范围,可以屏蔽特殊字符号的作用)
- 反撇号 `` 或 $():将命令的执行输出作为变量值
- read :使用read命令从键盘读取变量值
[root@desktop0 opt]# vim test2
#!/bin/bash
read -p "请输入账户名" u
read -p "请输入密码" p
useradd $u &>> /opt/no.txt
echo $p | passwd --stdin $u
Stty -echo 关闭回显 (可以在输入密码时关闭回显)
Stty echo 恢复
[root@desktop0 opt]# vim test2
#!/bin/bash
read -p "请输入账户名" u
stty -echo //关闭回显
read -p "请输入密码" p
useradd $u &>> /opt/no.txt
echo $p | passwd --stdin $u
[root@desktop0 opt]# bash test2
请输入账户名
请输入密码更改用户 natasha 的密码 (不显示)
passwd:所有的身份验证令牌已经成功更新。