shell脚本基础
shell脚本基础
脚本组成
#!环境声明(sha-bang)(声明一个解释器)
#注释脚本(英文)
可执行代码
/dev/null:垃圾回收机制(黑洞设备)
变量:以不变的名称存放可能变化的值
变量名=变量值
定义/赋值变量
若指定的变量已存在,相当于为此变量重新赋值
等号两边不要有空格
变量名由字母/数字/下划线/组成。区分大小写
变量名不能以数字开头,不能使用关键字和特殊符号
为变量赋值:
变量名=值
read 为变量赋值,读入用户在键盘上的输入,将用户在键盘上的输入赋值给变量
查看/引用变量
基本格式
引用变量值:$变量名
查看变量值: echo $变量名 echo $a
echo ${变量名}常量 echo ${a}7 (区分变量与常量的值)
echo $[运算式] echo $[1+1] 代表运算
echo $() 将输出结果作为参数
echo `` mkdir mariadb-`date +%F 将输出结果作为参数
echo '' 屏蔽特殊符号
常见变量
which 命令字 查找命令程序存在娜
USER:当前登陆系统身份
位置变量 执行脚本的时候提供命令行参数(传递参数)
表示为$n,n为***
$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$......
预定义变量 用来保存脚本程序的执行信息
$# 已加载位置变量的个数(计算位置变量使用的次数)echo $#(vim)
$* 所有输出的位置变量 echo $*(vim)
$? 程序退出后的状态值,0表示正常,其他值异常 echo $0(命令行)
自定义变量 用户自定义设置,修改及使用
生成随机数 $RANDOM
求余运算:余数一定小于被除数
条件测试及选择
检查文件状态
-e:存在为真
-d:存在且为目录,才为真
-f:存在且为文件,才为真
-r:存在且对文件有读权限,才为真
-w:存在且对文件有写权限,才为真
-x:存在且对文件有执行权限,才为真
格式:[空格选项空格参数空格]
[ -e /etc ] echo $? 判断
比较整数大小(带g都有大于,带e都有等于,带l都有小于)
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
-lt 小于
-le 小于等于
格式:[ 1 -ep 1] echo $? 判断(可以是位置变量)
[[email protected] ~]# [ $a -gt $b ]
[[email protected] ~]# echo $?
1
字符串比对
== 字符串一致为真
!= 字符串不一致为真
格式:[[email protected] ~]# [ $USER == root ]
[[email protected] ~]# echo $?
0
if选择结构
单分支:当条件满足时,作判断处理
格式:
if [条件判断]; then
判断语句1
#!/bin/bash
read -p '请输入你要测试的IP' id
ping -c 4 $id &> /dev/null
if [ $? -eq 0 ];then
echo ok
else
echo bye-bye
fi
双分支:当条件满足/不满足时,分别作判断处理
格式:
if [条件判断]; then
判断语句1
else
判断语句2
fi
多分支:判断条件1,或条件2,都不满足时,往下判断处理
#!/bin/bash
num1=$[$RANDOM%3]
read -p '请输入[0-3]之间的数字:' num2
if [ $num1 -eq $num2 ];then
echo 恭喜你猜对了
exit
elif [ $num2 -gt $num1 ];then
echo 你猜大了
else
echo 再来一次
fi
列表示循环
for循环结构
for循环处理
遍历循环列表:根据变量的不同取值,重复执行列表
格式:for 变量名 in 列表值
do
命令序列
done:
#!/bin/bash
for a in 007 9527 dc
do
useradd $a
echo $a创建成功
done
变量a参与循环,变量a影响循环的结果
管道传递
• 使用 | 管道操作
– 将前一条命令的标准输出交给后一条命令处理
重定向输出
> : 只收集前面命令的正确输出
2> : 只收集前面命令的错误输出
&> : 前面命令正确与错误输出
[[email protected] 桌面]# cat /etc/ /etc/passwd > /opt/1.txt 可以多重查看 一个大于号 正确信息的定向
查看 etc etc下的文件 正确信息导入 文件夹
分为错误信息和正确性信息 一起显示在桌面
正确信息
cat: /etc/: 是一个目录 报错信息
[[email protected] 桌面]# cat /etc/ /etc/passwd 2> /opt/2.txt 可以多重查看 2>号 错误信息的定向
查看 etc etc下的文件 错误信息导入 文件夹
[[email protected] 桌面]# cat /opt/2.txt 查看文件夹2
cat: /etc/: 是一个目录
[[email protected] 桌面]# cat /opt/1.txt 查看文件夹1
正确信息--------
&> 正确和错误都导入一个文件夹
2>> 错误信息的追加重定向