Linux(CentOS)编写脚本
脚本要求
⽂件后缀最好.sh,这样容易区分脚本⽂件
要有脚本解析器声明
要有脚本注解声明
编辑脚本 vim xxx.sh
执⾏脚本 bash 【脚本名称】或者sh 【脚本名称】
有参数的脚本在正常执⾏语句后追加,多个⽤空格间隔,例如:sh xxx.sh one tow three four five 编写第⼀个简单的脚本
第⼀⾏#!脚本声明采⽤的Shell解析器
第⼆⾏# 备注该脚本的作⽤
第三⾏以下是脚本要执⾏的命令:1.输出“Hello sh”;2.查看当前所在⽬录;3.查看当前⽬录所有⽂件
#!/bin/bash
#test of sh
echo Hello sh
pwd
ls -al
接收参数的脚本
第⼀⾏#!脚本声明采⽤的Shell解析器
第⼆⾏# 备注该脚本的作⽤
$0获取脚本名字;$#获取参数总和;$【整数】获取整数对应的参数;$*列出所有参数
#!/bin/bash
#test of param sh
echo 当前脚本的名字是$0
echo 当前脚本⼀共接收了$#参数
echo 第⼀个参数是:$1,第三个参数是:$3
echo 列出所有参数 :$*
echo over
运算符
格式 [空格+判断语句+空格],例如:[ -f /root/chenyb ]
在centOS中运算符很严谨,例如:[ 1 -eq 1 ] √注意‘=’两边必须有空格;[ 1-eq1 ] ×;[ ! $USER = root ] √注意‘!’后⾯与‘=两边都有空格’;[ !$USER=root ] ×;[ ! $USER=root ] ×
输出执⾏结果 echo $?
运算符作⽤
⽂件操作
-d测试⽂件是否为⽬录类型
-e测试⽂件是否存在
-f判断⽂件是否为⼀般⽂件
-r测试当前⽤户是否有权限读取
-w测试当前⽤户是否有权限写⼊
-x 测试当前⽤户是否有权限执⾏测试返回true⽤0表⽰;如果为⾮0的其他数字(随机数)表⽰是false
逻辑操作与、或、⾮
&&
与,证明返回结果是成⽴的,可以接逻辑与逻辑,例如:[ -d /root] &&
echo is catalog ,测试root是否是⼀个⽬录,如果执⾏结果成⽴就输出“is catalog”
||
或,证明返回结果是成⽴的,可以接逻辑或逻辑,例如:[ -f
/] || echo not file,测试是否是⼀般⽂件,如果执⾏结果不成⽴就输出“not file”
!
⾮,⾮当前关系,在原基础上否定当前结果,与当前结果是相反的,例如:[! $USER
整数⽐较符(仅适⽤于整数之间⽐较)-eq 是否等于-ne 是否不等于-gt 是否⼤于-lt 是否⼩于-le 是否等于或⼩于-ge
是否⼤于或等于
字符串⽐较符(仅适⽤于整数之间⽐较)=⽐较字符串内容是否相同!=⽐较字符串内容是否不同
-z
判断字符串内容是否为空,例如: [ -z $LANG ] ; echo $?运算符
作⽤
⽂件操作
if条件测试语句
if语句分但分⽀结构、双分⽀结构、多分⽀结构单分⽀结构
判断当前⽬录存在aa⽬录是否,如果不存在创建⼀个
DIR="./aa"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
双分⽀结构
ping⼀个地址$存值,看其通不通,通会⾛then分⽀,不通会⾛else分⽀,最后输出罗列参数,测试语句:bash 脚本 ip
#!/bin/bash
# double if test
if [ $? -eq 0 ]
then
echo "$1 OK!"
else
echo "$1 NO!"
fi
echo $*
多分⽀结构
read - p 脚本运⾏后在输⼊框获取数据,读取的数据赋值给CASE
linux使用vim编辑文件输⼊0-100之外的数字会提⽰不在范围内,⾮数字会报错,然后提⽰error
80-100分很好;60-80之间为及格;60分以下为不及格
#!/bin/bash
#if elif lese test
read - p "case (0-100):" CASE
echo "case:$CASE"
if [ $CASE -gt 100 ] || [ $CASE - lt 0 ] ; then
echo "in case not range!"
elif [ $CASE - le 100 ] && [ $CASE -ge 80 ] ; then
echo "$CASE IS GOOD !"
elif [ $CASE -le 80 ] && [ $CASE -ge 60 ] ; then
echo "$CASE IS PASS !"
elif [ $CASE -le 60 ] ; then
echo "$CASE IS NOT PASS !"
else echo "$CASE ERROR !"
fi
for循环
<⾥⾯存的数据(默认会以空格或回车符分隔)
LIST=$(cat !/home/chenyb/),读取⽂件获取数据赋值给LIST变量
格式:for 变量 in 数据对象,do与done之间为循环体,可以写循环逻辑,循环体内引⽤变量格式:$变量
注意语法的开始,先开始的后结束,⽐如for循环先开始的done就在外层,fi在⾥层
LIST=$(cat !/home/chenyb/)
for USER in $LIST
do
echo $USER
if [ $USER = "CHen_Mujiao" ] ; then
echo "IS YOU $USER!"
fi
done
while循环
while格式:while 条件 do与done之间为循环体
脚本运⾏后会获取⼀个0-99的随机数,赋值给CASE:CASE=$(expr $RANDOM % 100)
读取⼀个外界输⼊的数字
MSG统计循环执⾏次数
条件判断,如果输⼊的数字⼤于随机数提⽰gt,⼩于提⽰lt,等于会提⽰猜了⼏次,然后通知答对了并推出循环exit ⾮数字会报错并提⽰error
#!/bin/bash
# for test
CASE=$(expr $RANDOM % 100)
MSG=0
echo "Guess the number:"
while true
do
read -p "waht's number :" NUM
let MSG++
if [ $NUM -qe $CASE ] ; then
echo "is $MSG NUM OK~! number is $CASE"
exit 0
elif [ $NUM -gt $CAS ] ; then
echo "GT!"
elif [ $NUM - lt $CASE ] ; then
echo "LT!"
else "ERROR!"
fi
done
case选择
输⼊字母、数字⾛不同的逻辑,当没满⾜匹配条件会⾛*逻辑(*其他)
#!/bin/bash
# for test
read -p "Guess the number :" NUM
case $NUM in
[a-z]) echo "lt's letters $NUM!";;
[0-9] echo "lt's number $NUM!";;
*) echo "lt's characrer $NUM!"
esac
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论