• Shell ==> 基础


    一、规范

    • Shell脚本是以.sh结尾的文件;
    • sh 文件的第一行内容为 #!/bin/bash,它告诉系统使用(Bourne Again Shell)解释器来执行;
    • shell 中的注释:# ;
    • shell 文件的执行有两种方式:
      • sh 文件名.sh;
      • 添加可执行权限:chmod +x 文件名.sh ,再进入文件所在目录,执行 ./文件名.sh;

    二、变量

    • 变量名=变量值:等于号两边不能有空格;
    • 变量命名规范:不能以数字开头,可以由字母、数字、下划线组成;
    • 输出变量内容:echo $变量名;
    • 变量的释放:unset 变量名;
    • 特殊的变量,带有空格的变量定义
      • 双引号"":如果变量值中存在 $变量名 的话,那么输出结果将会是变量名对应的变量值。如果想原样输出内容,可以在 $变量名 前面加转义字符 “”;
      • 单引号'':如果变量值中存在 $变量名,那么将原样输出;
      • 反单引号``:存放的是命令;

    练习:

    #!bin/bash
    dir=`pwd`
    echo "当前所在的目录是:$dir"
    输出当前所在的目录
    #!bin/bash
    # 进入/etc目录下
    cd /etc
    # 计算文件个数
    num=`ls -al|wc -l`
    # 输出
    echo "/etc下文件个数为:$num"
    计算/etc目录下有多少个文件
    #!bin/bash
    read -p "请输入指定目录:" dir
    cd $dir
    # 计算文件个数
    num=`ls -al|wc -l`
    # 输出
    echo "$dir下文件个数为:$num"
    统计任何指定目录下的文件个数

    read 用法

    • 变量名可以有一个或者多个,变量名用空格隔开,变量值用空格隔开;
    • 如果变量值多于变量名,那么将会把多余的变量值赋值给最后一个变量;
    • 可以添加提示信息:read -p "提示的内容" 变量名;

    三、参数传递

    • 命令:文件名 参数,如:sh script.sh /etc;
    • 文件中接收参数的方式
      • $1---> 表示第一个参数;
      • $2---> 表示第二个参数;
      • $n---> 表示第n个参数;
      • $0---> 代表文件名;
      • $@--> 显示全部参数;
      • $#--> 显示参数的个数;

    练习:

    #!/bin/bash
    echo "这个数据是$1"
    echo "这个数据是$2"
    echo "这是$0"
    echo "这是$@"
    echo "这是$#"

    结果:

    四、重定向

    把命令的结果输出到文件中

    • 正确的命令:用 1 表示
      • 覆盖:命令 1>文件名,如:ls 1>a.txt;
      • 追加:命令 1>>文件名,如:ls /tmp 1>>a.txt;
    • 错误的命令:用 2 表示
      • 覆盖:命令 2>文件名,如:ls 2>a.txt;
      • 追加:命令 2>>文件名,如:ls /tmp 2>>a.txt;

    五、条件判断

    1、if...else

    if [ 条件 ]
    then
     语句
    else
     语句
    fi
    #####################
    if [ 条件 ];then
     语句
    else
     语句
    fi
    if...else语法
    • if 后面要有空格
    • 中括号内条件两边要有空格
    • 多个条件间要有空格
    • 条件中如果存在变量,那么变量的两边要有双引号,如:if [ "$dir" == "" ]

    练习:

    #!/bin/bash
    dir=/root
    command=`ls $dir`
    if [ "$command" == "" ];then
        echo "目录为空"
    else
        echo "目录不为空"
    fi
    判断/root目录是否为空
    #!/bin/bash
    read -p "请输入目标目录:" dir
    command=`ls $dir`
    if [ "$command" == "" ];then
            echo "目录为空"
    else
            echo "目录不为空"
    fi
    通过用户输入任意目录判断是否为空
    • 字符串比较
      • ==:判断是否相等
      • !=:判断是否不相等
    #!/bin/bash
    read -p "请输入用户名和密码:" username password
    if [ "$username" == "admin" -a "$password" == "123456" ];then
            echo "用户名和密码正确"
    else
            echo "用户名或密码不正确"
    fi
    判断用户输入的用户名和密码是否正确
    • 逻辑运算符:
      • 或:-o
      • 与:-a
      • 非:!
    #!/bin/bash
    read -p "请输入一个数字:" num
    if [ "$num" -gt 0 ]
    then
            ((num++))
            echo $num
    else
            ((num--))
            echo $num
    fi
    输入数字,判断是否大于0
    • 比较运算符(数字)
      • -eq ---> 判断是否相等
      • -ne ---> 判断是否不相等
      • -gt ----> 判断是否大于
      • -ge ---> 判断是否大于等于
      • -lt ----> 判断是否小于
      • -le ----> 判断是否小于等于
    •  数字变量操作
      • 递增
        • ((i++))
        • ((i+=1))
        • i=$[$i+1]
        • let i=i+1
        • i=$(($i+1))
      • 递减也是一样有上面5中方式
    #!/bin/bash
    read -p "请输入对应的目录:" dir
    if test -d $dir
    then
            num=`ls $dir|wc -l`
            echo "目录$dir下的文件个数为:$num"
    else
            echo "目录$dir不存在"
    fi
    判断用户输入的目录是否存在
    • 测试文件状态
      • test 参数 变量名
      • 参数
        • -e:表示文件是否存在
        • -f:表示文件是否存在且为文件
        • -d:表示文件名是否存在且为目录
        • -r:可读
        • -w:可写
        • -x:可执行

    2、if...elif..else

    if [ 条件 ]
    then
     语句
    elif [ 条件 ]
    then
      语句
    elif [ 条件 ]
    then
      语句
    ....
    else
      语句
    fi
    if...elif...else语法

    练习:

    判断学生的成绩,范围在90-100提示优秀,80-90之间提示良好,70-80之间则提示一般,60-70之间提示及格。其他则提示不及格

    #!/bin/bash
    read -p "请输入学生的成绩:" score
    if [ "$score" -gt 90 -a "$score" -lt 100 ]
    then
            echo "优秀"
    elif [ "$score" -gt 80 -a "$score" -lt 90 ]
    then
            echo "良好"
    elif [ "$score" -gt 70 -a "$score" -lt 80 ]
    then
            echo "一般"
    elif [ "$score" -gt 60 -a "$score" -lt 70 ]
    then
            echo "及格"
    else
            echo "不及格"
    fi
    判断学生成绩

    判断用户输入的内容是否为空,为空则提示,不为空则判断是否为目录,不为目录则判断是否为文件,否则提示错误信息

    #!/bin/bash
    read -p "请输入内容:" content
    if [ -z "$content" ]
    then
            echo "输入内容为空"
    elif [ -d "$content" ]
    then
            echo "是一个目录"
    elif [ -f "$content" ]
    then
            echo "是一个文件"
    else
            echo "输入错误"
    fi
    判断用户输入内容
    • 文件判断
      • -r:文件是否存在且可读
      • -w:文件是否存在且可写
      • -x:文件是否存在且可执行
      • -f:文件是否存在且是普通文件
      • -d:文件是否存在且是一个目录
      • -e:文件是否存在
      • -n:字符串长度是否不等于0
      • -z:字符串长度是否等于0

    3、case

    case $变量名 in
    "")
      语句;;
    "")
      语句;;
    "")
      语句;;
    .....
    *)
      语句;;
    esac
    case...esac
    • case 这一行最后必须为 in
    • ;; ----> 结束语句
    • *----> 默认分支
    • esac ---> case语句的结束
    • 值可以是字符串也可以是数字,还可以是区间范围,但是范围必须是:[0-9]之间

    练习:

    #!/bin/bash
    read -p "请输入产品编号:" chr
    case $chr in
    "001")
            echo "台灯";;
    "002")
            echo "风扇";;
    "003")
            echo "电脑";;
    *)
            echo "默认是空调";;
    esac
    输入一个字符串,判断该用户选择哪款产品
    #!/bin/bash
    read -p "请输入对客服的满意度:" chr
    case $chr in
    [0-3])
            echo "不满意";;
    [4-6])
            echo "满意";;
    [7-9])
            echo "非常满意";;
    esac
    满意度调查

    六、循环

    1、for

    for 变量名 in 列表
    do
      语句
    done
    for循环格式

    练习:

    #!/bin/bash
    #循环
    for i in 1 2 3 4 5 6 7 8 9 10
    do
        echo $i
    done
    输出1到10之间的数
    #!bin/bash
    for i in `seq 1 2 10`
    do 
            echo $i
    done
    输出1到10之间的奇数
    • seq start size max
      • start:开始点
      • size:间隔
      • max:结束点
      • 如果size的值为1,则可以省略

    2、while

    while [ 条件 ]
    do
        命令
    done
    while循环格式

    练习:

    #!bin/bash
    i=1
    sum=0
    while [ "$i" -le 100 ]
    do
            ((sum=sum+i))
            ((i++))
    done
    echo $sum
    求1-100之间的和

    七、函数

    函数名(){
      代码
    }
    函数格式
    • 函数的调用
      • 必须先定义再调用
      • 格式:直接使用函数名
    • 函数中的参数
      • 使用$n来接收数据
    • 返回值
      • 函数中默认的存在返回值
      • 正确时返回0
      • 错误时返回1
      • 查看返回值内容:$?

    练习:

    #!/bin/bash
    # 定义函数
    add(){
            sum=$(($1+$2))
    return $sum
    }
    # 从键盘输入
    read -p "请输入第一个数字:" aNum
    read -p "请输入第一个数字:" bNum
    echo "输入的两个数分别为:$aNum 和 $bNum"
    add $aNum $bNum
    # 输出返回值
    echo "两个数之间的和为:$?"
    输入任意两个整数进行求和运算

    输入一个目录,判断目录是否存在,如果不存在则给出提示,如果存在则提示输入要创建的文件名,判断创建的文件是否存在,如果不存在,则继续创建,否则提示该文件已经存在,用函数实现

    #!/bin/bash
    # 创建文件函数
    create_file(){
            # 进入目录
            cd $1
            # 提示用户输入文件名
            read -p "请输入需要创建的文件名:" filename
            # 判断文件是否存在
            if test -e $filename
            then
                    echo "文件已存在"
            else
                    echo "文件不存在"
                    echo "开始创建文件..."
                    touch $filename
                    echo "文件创建成功"
            fi        
    }
    
    # 提示用户输入
    read -p "请输入目录名:" dir
    if test -d $dir
    then
            # 调用创建文件函数
            create_file $dir
    else
            echo "目录$dir不存在"
    fi
    创建文件
  • 相关阅读:
    JavaScript操作服务器控件之Gridview控件
    GridView_RowDataBound 常用方法
    GridView ,后台修改 跟新完毕,前端 未跟新处理
    怎么判断DropDownList是否选择值
    GridView.SelectedIndex
    DropDownlist数据SelectedIndexChanged触发问题解决
    error:将字符串转换为 uniqueidentifier 时失败
    UniqueIdentifier 数据类型
    在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?
    mysql给id生成uuid
  • 原文地址:https://www.cnblogs.com/L-Test/p/11710889.html
Copyright © 2020-2023  润新知