什么是Shell脚本?
Linux作为比较专业的操作系统,主要用于服务器端项目部署,需要很多命令组合完成一项功能,而这些功能很多都是重复执行的,比如数据库备份、软件环境安装、或者一个管理员要同时操作几百台甚至上千台的服务器,这就需要进行统一配置,同时完成多台服务器统一配置。
shell就是将指令放到一个文件中统一执行,且可以设置执行的逻辑。
学习shell就像是学习了一门编程语言,比如变量、选择结构、循环结构、函数等。
下面我们将如下多条指令用分号";"分隔开,首先强制删除当前目录下AA文件夹,如果不存在就忽略,再创建AA文件夹,在里面创建文件1.txt 2.txt 3.txt,这个过程写在一行执行:
rm -rf AA;mkdir AA;cd AA;touch test{1,2,3}.txt在shell中,将多个指令用;拼接起来,就是一个指令集合,按照顺序执行。然而,如果命令特别复杂,写在同一行是很不方便的,而且也无法保存命令,所以,我们将指令集合放到一个文件当中保存,统一执行,这就是shell脚本。
这样,我们就可以将工作中重复的流程性操作统一写好脚本,统一执行。
#! /bin/bash rm -rf AA mkdir AA cd AA touch test0{1,2,3}.txt查看在线用户
使用 w 或 who 命令都可以查看服务器上目前已登录的用户信息,两者的区别在于,w 命令除了能知道目前已登陆的用户信息,还可以知道每个用户执行任务的情况。
#! /bin/bash date w who脚本执行方法:
1.bash 文件名
2.chmod +x 文件名 ,再 ./文件名 执行
echo和变量
双引号"" :会把引号的内容当成整体来看待,允许通过$符号引用其他变量值单引号 :会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符反撇号`` :反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用#! /bin/bash echo hello cat. echo "hello cat." echo hello cat. name="blackcat" echo "hello $blackcat." echo "hello ${blackcat}." echo hello ${blackcat}. echo $(date +%F) echo `date +%F`只读变量
#! /bin/bash name="cat" gender="m" readonly name declare -r gender name="blackcat" gender="f"删除变量
#! /bin/bash name="cat" echo ${name} unset name echo ${name} echo "done!"变量分类
本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
环境变量:当前进程有效,并且能够被子进程调用。
查看当前用户的环境变量:env
查询当前用户的所有变量(临时变量与环境变量):set
export:将当前变量变成环境变量 # 将普通变量导出为环境变量 declare -x name # 将环境变量变为普通变量 declare +x name全局变量
全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用。
所有用户的环境变量:/etc/profile
当前用户的环境变量:~/.bashrc
修改后执行:source .bashrc,使环境变量生效。
内置变量
变量
含义
$0
当前脚本的文件名。
$n(n≥1)
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第1个参数是 1,第2个参数是1,第2个参数是2,第10个参数是 ${10}。
$#
传递给脚本或函数的参数个数。
$*
脚本后面所有参数,参数当成一个整体输出。
$@
脚本后面所有参数,参数是独立的,也是全部输出。
$?
上个命令的退出状态,或函数的返回值。若退出状态值为0,表示命令运行成功。
$$
当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
整型变量
数组变量
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 value2 ... valuen)普通数组
关联数组
read交互式输入
选项
说明
-a array
把读取的数据赋值给数组 array,从下标 0 开始。
-d delimiter
用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。
-n num
读取 num 个字符,而不是整行字符。
-p prompt
显示提示信息,提示内容为 prompt。
-r
原样读取(Raw mode),不把反斜杠字符解释为转义字符。
-s
静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。
-t seconds
设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。
0 留言