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 /root/test.txt] || echo not file,测试test.txt是否是一般文件,如果执行结果不成立就输出“not file”
!非,非当前关系,在原基础上否定当前结果,与当前结果是相反的,例如:[ ! $USER
 
整数比较符(仅适用于整数之间比较)
-eq是否等于
-ne是否不等于
-gt是否大于
-lt是否小于
-le是否等于或小于
-ge是否大于或等于
字符串比较符(仅适用于整数之间比较)
=比较字符串内容是否相同
!=比较字符串内容是否不同
-z判断字符串内容是否为空,例如: [ -z $LANG ] ; echo $?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • if条件测试语句
    • if语句分但分支结构、双分支结构、多分支结构
  • 单分支结构
    • 判断当前目录存在aa目录是否,如果不存在创建一个
#!/bin/bash
# one if test
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
    • 输入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.txt里面存的数据(默认会以空格或回车符分隔)
    • LIST=$(cat !/home/chenyb/test/list.txt),读取list.txt文件获取数据赋值给LIST变量
    • 格式:for 变量 in 数据对象,do与done之间为循环体,可以写循环逻辑,循环体内引用变量格式:$变量
    • 注意语法的开始,先开始的后结束,比如for循环先开始的done就在外层,fi在里层
#!/bin/bash
# for test 
LIST=$(cat !/home/chenyb/test/list.txt)
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

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值