#!shell脚本格式决定专业性
#!/bin/bash #filename:脚本名 #author:作者 #date:时间 #脚本作用
脚本的执行方式 #脚本名为wk.sh
绝对路径 /root/wk.sh #另开一个shell终端执行 相对路径 ./wk.sh sh解释器 sh wk.sh 与bash一样 bash wk.sh source 脚本路径( 与. wk.sh)路径相同 #在当前终端执行,在当前终端生效 #除了sh 解释器执行脚本 其他三种执行方式脚本必须有x权限
重定向操作
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定文件读取出书 |
重定向输出 | > >> | 将输出结果指定或追加到文件 |
标准错误输出 | 2> 2>> | 将错误输出指定或追加到文件 |
混合输出 | &> | 输出不论对错 指定到一个文件 |
变量
自定义变量:
wk=heheheheecho $wk hehehehe
环境变量:由系统维护的变量
env #查看环境变量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #用于可执行程序的搜寻路径
位置变量: 通过命令行给脚本传参
$0 对应脚本名 $1-8对应8个参数 #shell脚本最多可以直接处理9个参数
预定义变量: bash中内置的变量,不能直接修改
$*和$@ #保存了传递的所有参数 $0 #脚本名称 $? #输出状态码 $# #参数个数 $$ #输出脚本的PID
定义变量与输出
定义一个新的变量 格式:变量名=变量值 注意:变量名必须以字母或下划线开头,严格区分大小写(不能以数字开头) 赋值可使用引号 单引号:''不引用变量,视$为普通字符 双引号:""允许通过$调用变量 反撇好:``或$()先取其中的命令,再执行结果
交互式输入输出
交互式输入 read -p "提示信息" 变量名
局部变量与全局变量
export 变量名 exprot 变量名=变量值 在全局生成变量
变量的运算
echo $((x+y))
条件判断
(1)文件判断
-d 判断是否为目录 -e 判断目录或文件是否存在 -f 判断是否为文件 -r -w -x 判断读写执行权限 -L 判断是否为链接文件
#格式
[ -d /root ]
echo $?
0
(2)整数判断
-eq 等于 -ne 不等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于
#格式
[ 1 -eq 1 ]
echo $?
0
(3)字符串判断
[ aaa == aaa ] #字符串内容相同 [ aaa != bbb ] #字符串内容不同 [ -z 字符串 ] #字符串内容为空
(4)逻辑测试
&&而且 ||或 条件1 && 条件2 || 条件3 #如果条件1成立则执行条件二,不成立执行条件3
条件1 || 条件2 #如果条件1不成立,执行条件2,不论成不成立都继续往下执行条件3
条件3
条件1 ||{ #如果条件一不成立则执行括号内的条件2和条件3
条件2
条件3
}
if语句
if 条件1;then #如果 条件1成立;那么 echo 1 #输出 1 elif 条件2;then #或者 条件2成立;那么 echo 2 #输出 2 else #否者 echo 3 #输出 3 fi #"if结束语"
case语句
case 变量 in #判断一个变量 从上到下依次匹配 匹配及停止 1) #如果变量等于1 echo "hehe" #输出 hehe ;; 2) #如果等于2 echo "xixi" #输出 xixi ;; *) #通配符*匹配所有 echo "zzz" #输出 zzz esac #"case结束语"
sshe函数
执行脚本 #!/bin/bash haha(){ #定义一个函数,函数名为haha echo $1 #函数内的shell语句, 调用函数就会执行函数里的内容 echo $2 echo $10 echo ${10} #2位以上的参数需用大括号括起来让他是一个整体 } haha 1 2 3 4 5 6 7 8 9 11 #函数可以传参,但是一般不用传参而是直接调用函数名,执行函数里的内容 #执行结果 1 2 10 11
shell循环语句
for循环
唯一无法实现无限循环的循环语句,因为for循环的取值是有限的
#!/bin/bash for i in `seq 3` do echo $i done #输出结果 1 2 3
特殊for循环,C语言循环不属于正规shell语言 (( ))两个括号b表示启用C语言,i++是C语言里自身+1 在循环内用let i++调用
#!/bin/bash for ((i=0;i<3;i++)) #引用C语言 i=0并且i<3,i自身+1 do echo $i done #输出结果 0 1 2
#!/bin/bash #for 无限循环 for ((i=0;;i++)) #不设置结束条件,实现无限循环,但结束条件的位置要空出来 do echo $i done
while循环
while : #while : 条件一直为真无限循环 do 命令 done
#!/bin/bash i=0 while [ $i -le 5 ] do echo $i let i++ done #输出结果 0 1 2 3 4 5
shell脚本4个循环控制语句
exit 终止脚本
break 跳出循环,只跳出离它最近的那次循环
continue 终止本次循环进入下次循环
return 针对函数使用,退出函数体
调用函数
调用系统函数 . /etc/init.d/functions action "服务启动" /bin/true