• Shell脚本学习(2)


    一 条件测试

    1.类型

    文件测试、数值比较、字符串比较

    2.小程序

    if ! test -d $1;then  #测试参数1是否是目录
        mkdir $1          #不是目录则创建目录
    fi
    if [ ! -d $1 ]; then #和上面含义相同 mkdir $1
    fi

    #test 命令 相当于 [ ] 命令
    if [ $UID -ne 0];then         #判断用户权限是否等于0
        echo "no permission"
        exit
    fi
    
    if [$USER != "root"];then     #判断用户是否是root
        echo "no permission"
        exit
    fi

    通过man test 去查看所有判断选项

     3.字符串比较

    提示:使用双引号

    ["$USER" = "root"]; echo $?

    ["$USER" == "root"]; echo $?

    [-z "$damon"] 字符长度是0

    [-n "$damon"] 字符长度不是0

    例子:

    damon@ubuntu:~$ v1=
    damon@ubuntu:~$ [ -z $v1 ];echo $?
    0
    damon@ubuntu:~$ [ -n $v1 ];echo $?
    0
    damon@ubuntu:~$ [ -n "$v1" ];echo $?
    1
    damon@ubuntu:~$ 

    可以看出字符串变量是否加双引号的结果是不一样的,加双引号的结果是正确的!

    4.数值比较

    root@ubuntu:/# [ 1 -lt 2 -a 5 -gt 10 ];echo $?
    1
    root@ubuntu:/# [ 1 -lt 2 -o 5 -gt 10 ];echo $?
    0
    
    root@ubuntu:/# [[ 1 -lt 2 && 5 -gt 10 ]];echo $?
    1
    root@ubuntu:/# [[ 1 -lt 2 || 5 -gt 10 ]];echo $?
    0

    5.If 

    #!/usr/bin/bash
    cat <<-EOF
    ###########################
    #     A.Ross              #
    #     B.Chandler          #
    #     C.Joey              #
    #     D.Richel            #
    #     E.Fibe              #
    #     F.Monica            #
    ###########################
    EOF
    
    read -p "Which person do you like best: " name
    
    if [ "$name" == "A" ];then
            echo "Ross"
    elif [ "$name" == "B" ];then
            echo "Chandler"
    elif [ "$name" == "C" ];then
            echo "Joey"
    elif [ "$name" == "D" ];then
            echo "Richel"
    elif [ "$name" == "E" ];then
            echo "Fibe"
    elif [ "$name" == "F" ]; then
            echo "Monica"
    else
            echo "Unknown name"
    fi

    6.模式匹配:case

    case只能进行字符串匹配

    case 变量 in

    模式1)

      命令序列1

      ;;

    模式2)

      命令序列3

      ;;

    *)

           无匹配后命令序列

    esac

    例子:

    #!/usr/bin/bash
    cat <<-EOF
    ###########################
    #     A.Ross              #
    #     B.Chandler          #
    #     C.Joey              #
    #     D.Richel            #
    #     E.Fibe              #
    #     F.Monica            #
    ###########################
    EOF
    
    read -p "Which person do you like best: " name
    
    case "$name" in
    A|a)
            echo "Ross"
            ;;
    B|b)
            echo "Chandler"
            ;;
    C|c)
            echo "Joey"
            ;;
    D|d)
            echo "Richel"
            ;;
    E|e)
            echo "Fibe"
            ;;
    F|f)
            echo "Monica"
            ;;
    *)
            echo "Unknown name"
            ;;
    esac

    二 循环

    1.for

    for 变量名 [in 取值列表]

    do

      循环体

    done

    for i in `seq 4`
    do
        echo i
    done 

    2.while

    while 条件

    do 

      循环体

    done

    #!/bin/bash
    i=1
    while [ $i -le 4 ]
    do
        echo "$i"
        i=$[$i+1]
    done

     三 其他

    1. 更改终端登陆界面

    更改/etc/issue中的内容

    默认内容

     issue内的各代码意义

    d 本地端时间的日期;

    l 显示第几个终端截面

    m 显示硬件的等级(i386/i486/i586/i686...);

    显示主机的网络名称;

    O 显示domain name;

    操作系统的版本(相当于uname -r);

    显示本地端时间的时间;

    S 操作系统的名称;

    v 操作系统的版本;

    2. 字符串转换命令

    tr: 可以用来删除一段信息当中的文字,或是进行文字信息的替换;

    col:可以用来处理将tab键转换成空格键;

    join:主要用在处理 两个文件当中,有相同数据的那一行,才将它加在一起 的意思。在适用join之前,你所需要处理的文件应该要事先经过排序;

    past:直接将两行贴在一起,且中间以tab键隔开

    expand:就是将tab按键转成空格键;

    unexpand:将空格转换成tab键;

    3.当创建用户后,没有创建家目录时

    cp -a /etc/skel /home/damon ///etc/skel是家目录的模板,所有账号在创建时,都是复制的该目录

    chown -R damon:damon /home/damon //设置家目录的拥有这和组拥有者

    chmod 700 /home/damon //给目录拥有者设置r w x权限

    愿有志之人,成就非凡之事。
  • 相关阅读:
    01 网络基础
    01 ansible的基本介绍
    10 面向对象的编程
    03 docker容器镜像基础
    09 异常处理
    08 输入输出
    07 数据结构
    02 docker的基本用法
    01 docker容器技术基础入门
    06 字符串
  • 原文地址:https://www.cnblogs.com/damon-song/p/13194543.html
Copyright © 2020-2023  润新知