• Linux的Shell


     
    一丶什么是shell
    SHELL终端翻译器是人和计算机硬件之间的翻译官
    

      

    二丶shell脚本命令的两种工作方式
    1.交互式(interactive):用户每输入一条指令就立即执行
    2.批处理(Batch):用户实现编写好的完整shell脚本,shell会一次执行脚本中的诸多命令
    
    三丶查看shell'变量
    echo $SHELL
    
    四丶编写简单的shell脚本
    1.查看当前工作了路径并列出当前目录下所有文件及文件信息
    vim example.sh    #.sh代表脚本文件
    #!/bin/bash   #声明脚本
    #这是一个示例   #注释信息
    pwd        #查看当前了路径
    ls -al       #查看当前路径下的所有文件和信息
    
    五丶接收用户的参数
    Linux内设了用于接收参数的变量,变量之间可以使用空格间隔。
    $0对应的是当前Shell脚本程序的名称,
    $#对应的是总共有几个参数,
    $*对应的是所有位置的参数值,
    $?对应的是显示上一次命令的执行返回值,
    而$1、$2、$3……则分别对应着第N个位置的参数值
    

    [root@linuxprobe ~]# vim example.sh
    #!/bin/bash
    echo "当前脚本名称为$0"
    echo "总共有$#个参数,分别是$*。"
    echo "第1个参数为$1,第5个为$5。"
    结果为:
    [root@linuxprobe ~]# sh example.sh one two three four five six
    当前脚本名称为example.sh
    总共有6个参数,分别是one two three four five six。
    第1个参数为one,第5个为five。
    

    六丶判断用户的参数

     Shell脚本中的条件测试语法可以判断表达式是否成立.

    条件成立:返回数字0
    否则:便返回其他随机数值

    语法:

    测试语句的种类:

    1.文件测试语句;

    2.逻辑测试语句;

    3.整数值比较语句;

    4.字符串比较语句;

    查看是否为目录类型
    [root@linuxprobe ~]# [ -d /etc/fstab ]
    [root@linuxprobe ~]# echo $?
    1
    查看是否是一般文件
    [root@linuxprobe ~]# [ -f /etc/fstab ]
    [root@linuxprobe ~]# echo $?
    0
    
    &&与运算
    [root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
    Exist
    
    ||或运算
    [root@linuxprobe ~]# echo $USER
    root
    [root@linuxprobe ~]# [ $USER = root ] || echo "user"
    [root@linuxprobe ~]# su - linuxprobe 
    [linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
    user
    
    !非运算
    [linuxprobe@linuxprobe ~]$ exit
    logout
    [root@linuxprobe root]# [ $USER != root ] || echo "administrator"
    administrator
    
    条件成立运行与运算,否则运行或运算
    [root@linuxprobe ~]# [ $USER != root ] && echo "user" || echo "root"
    root
    

    [root@linuxprobe ~]# [ 10 -gt 10 ]
    [root@linuxprobe ~]# echo $?
    1
    [root@linuxprobe ~]# [ 10 -eq 10 ]
    [root@linuxprobe ~]# echo $?
    0
    

    判断字符串是否为空
    [root@linuxprobe ~]# [ -z $String ]
    [root@linuxprobe ~]# echo $?
    0
    判断语言
    [root@linuxprobe ~]# echo $LANG
    en_US.UTF-8
    [root@linuxprobe ~]# [ $LANG != "en.US" ] && echo "Not en.US"
    Not en.US
    

    七丶流程控制语句

    (1)if条件测试语句

    if条件语句单分支组成:if、then、fi

    [root@linuxprobe ~]# vim mkcdrom.sh
    #!/bin/bash
    DIR="/media/cdrom"
    if [ ! -e $DIR ]
    then
    mkdir -p $DIR
    fi
    

    if条件语句的双分支结构由if、then、else、fi关键词组成

    [root@linuxprobe ~]# vim chkhost.sh
    #!/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
    

    if条件语句的多分支结构由if、then、else、elif、fi关键词组成

    [root@linuxprobe ~]# vim chkscore.sh
    #!/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
    [root@linuxprobe ~]# bash chkscore.sh
    Enter your score(0-100):88
    88 is Excellent
    [root@linuxprobe ~]# bash chkscore.sh 
    Enter your score(0-100):80
    80 is Pass
    

    (2)for条件循环语句

    [root@linuxprobe ~]# vim users.txt
    andy
    barry
    carl
    duke
    eric
    george
    

    /dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁

    [root@linuxprobe ~]# vim Example.sh
    #!/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
    

    /etc/passwd是用来保存用户账户信息的文件

    [root@linuxprobe ~]# bash Example.sh
    Enter The Users Password : linuxprobe
    andy , Create success
    barry , Create success
    carl , Create success
    duke , Create success
    eric , Create success
    george , Create success
    [root@linuxprobe ~]# tail -6 /etc/passwd
    andy:x:1001:1001::/home/andy:/bin/bash
    barry:x:1002:1002::/home/barry:/bin/bash
    carl:x:1003:1003::/home/carl:/bin/bash
    duke:x:1004:1004::/home/duke:/bin/bash
    eric:x:1005:1005::/home/eric:/bin/bash
    george:x:1006:1006::/home/george:/bin/bash
    

    (3)while条件循环语句

    [root@linuxprobe ~]# vim Guess.sh
    #!/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
    

    (4)case条件测试语句

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

    八丶计划任务服务程序

    计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。

    一次性计划任务:今晚11点30分开启网站服务。

    (1)设置一个一次性计划任务

    at 时间设置一个一次性计划任务
    at -l删除一个一次性计划任务
    [root@linuxprobe ~]# at 23:30 at > systemctl restart httpd at > 此处请同时按下Ctrl+d来结束编写计划任务 job 3 at Mon Apr 27 23:30:00 2015 [root@linuxprobe ~]# at -l 3 Mon Apr 27 23:30:00 2016 a root

    [root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
    job 4 at Mon Apr 27 23:30:00 2015
    [root@linuxprobe ~]# at -l
    3 Mon Apr 27 23:30:00 2016 a root
    4 Mon Apr 27 23:30:00 2016 a root

    长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz

    如果我们希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务

     

     
     
     
  • 相关阅读:
    POJ 3308 Paratroopers
    POJ 3228 Gold Transportation
    POJ 4786 Fibonacci Tree
    POJ 2987 Firing
    Models——英语学习小技巧之四
    Linux编程环境介绍(3) -- linux下的c/c++程序开发
    怎样使用Markdown
    windows系统中的dll的作用详细解释
    解决ListView 和ScroolView 共存 listItem.measure(0, 0) 空指针
    网页添加背景音乐
  • 原文地址:https://www.cnblogs.com/cangshuchirou/p/9296622.html
Copyright © 2020-2023  润新知