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}.......

第4章 Vim编辑器与Shell命令脚本第4章 Vim编辑器与Shell命令脚本

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

1648394621698

 [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删除,只能重启干掉

 

 

三、变量的扩展应用

可详见管道符、重定向与环境变量 - 运维鹿 (kervin24.top)

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”要加双引号

1648399209700

 [root@localhost ~]# bash test02.sh 
 请输入用户:kervin28
 请输入密码:更改用户 kervin28 的密码 。
 passwd:所有的身份验证令牌已经成功更新。

 

3.3、变量的作用范围

局部变量

  • 新定义的变量默认只在当前Shell环境中有效,无法在子Shell环境中使用

全局变量

  • 全局变量在当前Shell及字shell环境均有效
阅读剩余
THE END