编写简单shell脚本

#编写shell脚本
##1.编写简单脚本
    #!/bin/bash
    #for example by masf
    pwd
    ls -al

###内容简介:
    第一行 脚本声明(#!)告诉系统使用哪种shell解释器执行该脚本
    第二行 注释信息(#) 对脚本功能和某些命令的介绍
    第三行开始 写执行的命令

###执行方式:
    1.bash解释器运行脚本
    [root@localhost ~]# bash example1.sh
    2.通过输入完整路径运行脚本,需要修改权限
    [root@localhost ~]# chmod u+x example1.sh  增加可执行权限
    [root@localhost ~]# ./example1.sh 
##2.接收用户的参数
    1.Linux内设了用于接收参数的变量,变量之间使用空格间隔
    2.$0 对应的是当前脚本程序的名称
    3.$1、$2..... 分别对应第N个位置上的参数值
    4.$* 对应所有位置上的参数值
    5.$? 对应上一次命令的返回结果
    6.$# 参数的个数

###脚本样例
    #!/bin/bash
    echo "当前脚本名称为$0"
    echo "总共有$#个参数,分别是$*"
    echo "第一个参数是$1,第五个参数是$5."
### 执行结果                                                                                                                                                                              
    [root@localhost ~]# bash example2.sh one two three four five six 
    当前脚本名称为example2.sh
    总共有6个参数,分别是one two three four five six
    第一个参数是one,第五个参数是five.
##3. 判断用户的参数
###条件测试语句
    分类:
        文件测试语句
        逻辑测试语句
        整数值比较语句
        字符串比较语句
    格式:
        测试语句格式: [ 条件表达式 ]
        说明:条件表达式左右都有一个空格
###条件测试参数
    文件测试的参数及作用
    -d                     测试文件是否为目录
    -e                    测试文件是否存在
    -f                    测试文件是否是一般文件
    -r                    测试当前用户是否有权限读取
    -w                    测试当前用户是否有权限写入
    -x                    测试当前用户是否有权限执行

    逻辑测试语句
    &&(逻辑与)             && 符号前的命名为true,执行&&后命令
    ||(逻辑或)            || 符号前的命令为false,执行||后命令
    ! (逻辑非)

    整数比较运算符参数及作用
    -eq                    等于
    -ne                    不等于
    -gt                    大于
    -lt                    小于
    -le                    小于等于
    -ge                    大于等于

    字符串比较运算符参数及作用
    =                     比较字符串内容是否相同
    !=                    比较字符串内容是否不同
    -z                    判断字符串内容是否为空


###测试样例
    [root@localhost ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
    [root@localhost ~]# echo $FreeMem
    941

    [root@localhost ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient memory"
    Insufficient memory
    
    [root@localhost ~]# echo $LANG
    zh_CN.UTF-8
    [root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US"
    Not en.US

##4.流程控制语句
###if 条件测试语句
####测试样例:
    1.if条件语句判断/media/cdrom目录是否存在,存在就结束条件和整个脚本;不存在创建目录
    
    #!/bin/bash
    DIR="/media/cdrom"
    if [ ! -e $DIR ]
    then
    mkdir -p $DIR
    fi

    2.验证某台主机是否在线
    
    参数解释:
    -c                    设置尝试次数
    -i                    每个数据包的发送间隔
    -W                    设置超时时间

    #!/bin/bash
    ping -c 3 -i 0.2 -W 3 $1 $> /dev/null
    if [ $? -eq 0 ]
    then
    echo "Host $1 is on-line"
    else
    echo "Host $1 is off-line"
    fi

    3.多分支if语句来判断用户输入的分数在哪个成绩区间内
    
    参数解释
    read 用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量
    -p   用于向用户显示一定的提示信息
    
    
    #!/bin/bash
    read -p "Enter your score (0-100):" GRADE
    if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
    echo "$GRADE is excellent"
    elif [ $GRADE -ge 70 ] && [$GRADE -le 84] ; then
    echo "$GRADE is pass"
    else
    echo "$GRADE is Fail"
    fi

###for条件循环语句
####功能
    允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,适合处理的数据有范围
####语法结构
    for 变量名 in 取值列表
    do
        命令序列
    done

####测试样例
    参数解释
    id 用户名     命令查看用户的信息
    $?            判断命令是否执行成功,即用户是否已经存在
    /dev/null    是一个黑洞文件,把输出信息重定向到这个文件等同于删除数据
    
    1.从列表文件中读取多个用户名,然后逐一创建用户账户并设置密码
    
    #!/bin/bash
    read -p "Enter the users password:" PASSWD
    for UNAME in `cat users.txt`
    do
    id $UNAME $> /dev/null
    if [ $? -eq 0 ]
    then
    echo "already exists"
    else
    useradd $UNAME $> /dev/null
    echo "$PASSWD" | passwd --stdin $UNAME $> /dev/null
    if [ $? -eq 0 ]
    then
    echo "$UNAME , create success"
    else
    echo "$UNAME , create failure"
    fi
    fi
    done


###while条件循环语句
####语法结构
    while 条件测试操作
    do
        命令序列
    done

####测试样例
    参数解释
    $RANDOM 随机产生 0-32767之间的整数
    expr命令 取得结果

    
    #!/bin/bash
    PRICE=$(expr $RANDOM % 1000)
    TIMES=0
    echo "商品的实际价格为0-999之间,猜猜看是多少?"
    while true
    do
    read -p "请输入您猜的价格数据:" INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
    echo "恭喜您答对了,实际价格是$PRICE"
    echo "您总共猜测了 $TIMES 次"
    exit 0
    elif [ $INT -gt $PRICE ] ; then
    echo "太高了!"
    else
    echo "太低了!"
    fi
    done
    
###case条件测试语句
####语法结构
    case 变量值 in
    模式1)
        命令序列1
        ;;
    模式2
        命令序列2
        ;;
    *)
        默认序列
    esac    

     #!/bin/bash
    read -p "请输入一个字符,并按Enter键确认:" KEY
    case "$KEY" in
    [a-z] |[A-Z])
    echo "您输入的是 字母"
    ;;
    [0-9])
    echo "您输入的是数字"
    ;;
    *)
    echo "您输入的是 空格、功能键或其他控制符"
    esac

##5.计划任务程序服务
###计划任务分类
    一次性计划任务:今晚11点30分开启网站服务
    长期性计划任务:每周一的凌晨3点25分把/home/xxxx 目录打包备份为 backup.tar.gz
###一次性计划任务
    设置任务            at 时间
    查看任务            at -l
    删除任务            atrm 任务序号
###周期性计划任务
    Linux系统使用crond服务
    crontab -e                创建、编辑计划任务
    crontab -l                查看计划任务
    crontab -r                删除某条计划任务
    crontab -u                编辑他人的计划任务(需要管理员登录)

    crontab设置任务参数及作用
    分                        取值为0-59的整数
    时                        取值为0-23的整数
    日                        取值为1-31的任意整数
    月                        取值为1-12的任意整数
    星期                        取值为0-7的整数(0/7均是周日)
    命令                        要执行的命令或脚本
###测试样例
    [root@localhost ~]# crontab -e
    no crontab for root - using an empty one
    crontab: installing new crontab
    [root@localhost ~]# crontab -l
    25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
    0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

###注意事项
    在参数配置中,可以以#开头写上注释信息
    计划任务中的分字段必须有数值,不能是空或*
    日与星期字段不能同时使用,否则会发生冲突

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值