目录
一、shell脚本的意义
Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
二、如何创建shell脚本
编辑以.sh结尾的文件,以#!/bin/bash开头。
#!/bin/bash为脚本的幻数
三、自动添加脚本首部
/etc/vimrc | 此文件对所有用户生效(只能超级用户编辑) |
~/.vimrc | 此文件对当前用户生效 |
set nu | 显示行号 |
ts=2 | 指定tab键的长度为两个空格 |
et | 把tab键转换为空格 |
ai | 自动缩进 |
.strftime | 自动获取时间 |
四、如何执行脚本
1、当脚本无可执行权限时
(1)sh westos.sh 手动在环境中开启解释器
(2).westos 在当前环境中运行shell中的指令不开启新的shell
(3)source westos.sh 直接在当前环境中运行shell中的指令不开启新的shell
2、当脚本有可执行权限时
/mnt/westos.sh(绝对路径方式)与./westos.sh(.表示当前路径)本质上方法相同
五、对脚本进行测试
编辑脚本westos.sh
由于写入的cat命令错误,运行脚本时会一直处于运行状态,可以在运行时使用-x参数显示脚本运行过程,通过显示信息来调试脚本,小时=显示信息中的+表示运行的指令,不带+表示指令运行的结果,可以看出在执行cat命令时出错
练习:
(1)编写脚本以显示ip
(2)显示主机名称,ip和登陆当前主机的用户
(3)执行脚本后可以清空日志
六、shell脚本中的变量
1、变量的定义方法
(1)环境级别
当刚才的shell关闭后重新打开新的shell那么a的变量值被清除,因为当shell关闭时所有资源被系统回收,再打开新的shell时没有任何配置指定a=1
(2)用户级别
~/.bash_profile用户环境变量配置文件,source ~/.bash_profile生效当前更改信息
用户环境变量只针对被设定过的用户生效,切换用户后变量失效,因为切换后的用户开启shell时读取的是自己家目录中的.bash_profile
(3)系统级别
/etc/profile系统级别的配置主文件
/etc/profile.d/westos.sh系统级环境变量自定义配置文件,生效当前更改信息,此变量设定完毕后系统中的所用用户都可以使用
2、变量名称的定义规则
不能以@,数字开头结尾,但可以以 “ _ ”开头结尾
3、变量的转义
''为强引用:能引用所有,""为弱引用:有一部分引用不了,\ ` $ ! 都引用不了
echo \# 转义单个字符
echo "# # # # #"批量转义字符
4、声明
当显示$ab时 本身让$a的值显示出来,但系统识别$ab是一个变量名称,所以在此要对a这个变量进行声明
5、变量的数组
a=(1 2 3 4 5) | |
a$[a[@]:起始元素id:元素个数] | |
echo ${a[0]} | 数组中第一个元素 |
echo ${a[1]} | 数组中最后一个元素 |
echo ${a[*]} | 数组中所有元素 |
echo ${a[@]} | 数组中所有元素 |
echo ${a[@]:0:3} | 数组中1-3个元素 |
echo ${#a[@]} | 数组中元素的个数 |
unset a[n] | 删除数组中第n+1个元素 |
*表示元素为一个整体 @表示为每个元素作为一个个体
unset删除 unset a删除整个数组 unset a[0]删除数组中的第一个元素
七、linux中命令的别名设置
(1)添加
编辑~/.bashrc和/etc/bashrc文件,加入vim的别名xie,是设定生效后写与vim同义
切换用户后同样生效
(2)删除
删除两个文件vim的别名设置后依旧可以查看到别名设置
使用unalias删除环境中的xie后,就无法查看到vim的别名设置
八、环境变量
指定在执行命令时/mnt中的脚本可以用相对路径调用
九、脚本中的传参
1、非交互模式
$0 is /mnt/test.sh' <!--脚本本身-->
'$1 is westos' <!--脚本后所输入的第一串字符-->
'$2 is linux'
'$3 is redhat
'$* is westos linux redhat' <!--脚本后所输入的所有字符“westos linux redhat'-->
'$@ is westos linux redhat' <!--脚本后所输入的所有字符'westos''linux''redhat'-->
'$# is 3' <!--脚本后所输入的字符串个数-->