shell命令脚本(1)——规范与变量
个人博客站—运维鹿: http://www.kervin24.top
CSDN博客—做个超努力的小奚: https://blog.csdn.net/qq_52914969?type=blog
一、Shell脚本
Shell是用户与linux内核之间的解释器,所有解释器的总称
1.1、规范的脚本构成
合格规范的脚本应该包含以下内容
- #!脚本声明(使用哪种解释器解释代码)
- 注释信息,以#开始注释
- 可执行语句
二、Shell脚本变量
2.1、定义变量
定义变量的格式:变量名=变量值
取消变量的格式:unset变量名
注意事项
- =两边不能有空格,不要使用关键字做变量名,如ls、cd等
- 如果变量名已经存在,则覆盖之前的变量值
- 变量名称有:字母/数字/下划线组成,不能以数字开始
相关配置文件
/etc/profile /etc/bashrc /root/.bash_profile /root/.bashrc
- 系统每次启动都会自动执行/etc/profile文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)
- 不同用户登录系统会自动执行自己家目录的.bash_profile文件中的命令,自动执行~/.bashrc
- ~/.bashrc当前用户每切换一个shell环境都会自动执行,执行/etc/bashrc
- /etc/bashrc针对所有用户的,用户每切换一个shell环境都会自动执行
2.2、查看变量
- $变量名
- ${变量名}
[root@localhost ~]# x=centos7 设x=centos7 [root@localhost ~]# echo $x 查看变量x centos7 [root@localhost ~]# echo ${x} 查看变量x centos7 [root@localhost ~]# echo $x7.5 系统默认变量x7,但是没有,则显示.5 .5 [root@localhost ~]# unset x 取消变量 [root@localhost ~]# echo $x [root@localhost ~]#
2.3、变量类型
- 环境变量(变量名通常大写,有操作系统维护)
- 位置变量(bash内置变量,存储脚本执行时的参数)
- 预定义变量(bash内置变量,可以调用但是不能赋值或者修改)
- 自定义变量(用户自主设计)
2.3.1、环境变量
存储在/etc/profile或~/.bash_profile(当前用户生效)
命令env可以列出所有环境变量
常用的环境变量:PATH、PWD、USER、UID、HOME、SHELL
2.3.2、位置变量
- 存储脚本执行时的参数
- 使用$n表示,n为数字序列号
- $1、$2.........${10}、${11}.......
2.3.3、预定义变量☆
用来保存脚本程序的执行信息
- 直接使用这些变量
- 不能直接为这些变量赋值
变量名 | 含义 |
---|---|
$0 | 当前所在的进程或脚本名 |
$$ | 当前运行进程的PID号 |
$? | 命令执行后的返回状态,0表示正常,1或其他表示异常 |
$# | 命令行中位置变量的个数 |
$* | 显示所有位置变量的值 |
附
"$*" 把所有参数当作一个整体看待 "$@" 把脚本后的每一个参数当作一个个体去看待
示例:
[root@localhost ~]# ls /etc/hosts /etc/hosts [root@localhost ~]# echo $? 判断执行的上一条命令,0表示该命令执行正确 0 [root@localhost ~]# ls /etc/host ls: 无法访问/etc/host: 没有那个文件或目录 [root@localhost ~]# echo $? 判断执行的上一条命令,非0表示该命令执行失败 2
[root@localhost ~]# vim test01.sh
[root@localhost ~]# bash test01.sh aa bb cc dd test01.sh $0显示当前所在脚本名字 4195 $$显示当前进程的PID号 4 $#显示脚本后位置参数的个数 aa bb cc dd $*显示脚本后位置参数,整体显示 aa bb cc dd $@也一样显示脚本后位置所有参数,个体显示
2.3.4、自定义变量
见2.1定义变量和2.2查看变量
readonly 变量 只读变量,不能unset删除,只能重启干掉
三、变量的扩展应用
可详见
3.1、各种引号
区分三种定界符
- 双引号“ ” :强引号,允许扩展,以$引用其他变量
- 单引号' ' : 禁用扩展,即便$也视为普通字符
- 反问号` ` : 将命令的执行输出作为变量值,$()与反引号等效
双引号与单引号的区别 共同的:建立文件夹的时候都可以创立多个字符的整体,类似于c++中的字符串 区别:单引号无法识别特殊字符$组成的变量,只将其视作普通字符处理
举例:
[root@localhost ~]# echo "$USER" root [root@localhost ~]# echo 'USER' USER
反引号` `的作用是将要执行的命令作为变量值,输出的结果就是执行该变量值的结果 功能类似于$()
3.2、read命令定义变量
read从键盘读入变量值完成赋值
- 格式:read [-p "提示信息"] 变量名
- -p可选,-t可指定超时秒数,-s设置是否在终端显示输入的内容
- readonly 变量 只读变量,不能删除
[root@localhost ~]# read iname 给iname赋值 123 输入值 [root@localhost ~]# echo $iname 123 [root@localhost ~]# read -p "请输入信息:" iname -p,写入可选信息 请输入信息:12345 [root@localhost ~]# echo $iname 12345
[root@localhost ~]# read -t 3 iname 超过三秒,就退出read,不加-t,就永久等待输入
示例:
[root@localhost ~]# vim test02.sh #!/bin/bash read -p "请输入用户:" iname -p添加提示信息 read -s -p "请输入密码:" ipass -s为不在终端显示信息 useradd $iname echo "$ipass" | passwd --stdin $iname “$ipass”要加双引号
[root@localhost ~]# bash test02.sh 请输入用户:kervin28 请输入密码:更改用户 kervin28 的密码 。 passwd:所有的身份验证令牌已经成功更新。
3.3、变量的作用范围
局部变量
- 新定义的变量默认只在当前Shell环境中有效,无法在子Shell环境中使用
全局变量
阅读剩余
版权声明:
作者:做个超努力的小奚&kervin24
个人博客站:http://www.kervin24.top
CSDN博客:https://blog.csdn.net/qq_52914969?type=blog
作者:做个超努力的小奚&kervin24
个人博客站:http://www.kervin24.top
CSDN博客:https://blog.csdn.net/qq_52914969?type=blog
THE END