您当前的位置:主页 > 技术探讨 >

Shell脚本基础(一)

发布时间:2017-02-25 19:38编辑:admin阅读(

    今天接着上篇的命令继续学习,也可以到我的简书中查看最新的文章。
    8>echo命令的注意点
    1)-e:代表开启转义,让他认识转义字符
    2)转义字符
    \c:是一个转义字符,原先是换行,加了之后可以不换行
    \n:是一个换行转义字符
    \t:是一个转义字符,相当于tab键
    3)echo后面叫"",'',不加
    '':不能达到取值的效果,不推荐使用
    "":上面的缺陷都可以避免
    4)如果使用sh xx.sh运行的方式,不需要开启转义,echo "hello\tword"
    如果./xx.sh运行,需要开启转义,echo -e
    9>字符串的相关操作
    1)字符串长度计算
    示例代码:
    1 string=“hello”
    2 length=${#string}
    3 echo "${length}"
    2)字符串的拼接
    5 string1=“word”
    6 string3=“${string} ${string1}”
    7 echo "${string3}"
    3)字符串的截取
    10 string4="nihao"
    11 string5=${string4:2:3}
    12 echo "${string5}"
    10>
    %d:是一个占位符,是替整数类型的数据所占的位置
    %c:是一个占位符,是替单个字母所占的位置
    %f:是一个占位符,是替小数类型的数据所占的位置
    %s:是一个占位符,是替字符串占的位置
    %md
    %mc
    %ms
    %m.nf
    如果m<=n+1+整数的实际数的位数,m没有意义,相当于没写
    如果m>n+1+整数的实际数的位数,左边用空格补全,默认是右对齐,如果想左对齐,加-:%-m.nf
    注意点:任何数据类型都可以使用%s输出,但是字符串类型不能使用%d,%f,%c输出
    11,整数运算
    算数运算:+    -     \*    /     %     ++    ——
    简单案例
    1 num1=1
    2 num2=2
    3 num3=`expr ${num1}+${num2}`
    4 echo "${num3}"
    后缀++
    先赋值,后进行自加1
    num1=4
    let num2=num1++
    echo "num1=${num1},num2=${num2}"
    结果:num1=5,num2=4
    后缀--
    先赋值,后进行自减1
    num1=4
    let num2=num1--
    echo "num1=${num1},num2=${num2}"
    结果:num1=3,num2=4
    前缀++
    先进行自加1,后赋值
    num1=4
    let num2=++num1
    echo "num1=${num1},{num2}=${num2}"
    结果:num1=5,num2=5
    前缀--
    先进行自减1,后赋值
    num1=4
    let num2=--num1
    echo "num1=${num1},num2=${num2}"
    结果:num1=3,num2=3
    如果上面的expr不好用,可以用$(())
    关系运算
    \>  \<  \>=  \<=  \=  =  \!=  !=  ==  \==
    关系运算产生结果是一个逻辑结果,逻辑结果有1和0
    0代表这个逻辑错误的,1代表是这个逻辑是正确的
    逻辑运算符
    &&:事件1 并且 事件2
    如果事件1 并且 事件2成立,整个事件才成立;否则整个事件就不成立
    代码示例:
    read num
    #if [ `expr ${num} % 3` == 0 ]&&[ `expr ${num} % 5` == 0 ]
    if [[ `expr ${num} % 3` == 0 && `expr ${num} % 5` == 0 ]]
    then
            echo "3,5的倍数"
    else
           echo "就不是3,5的倍数"
    fi
    ||:事件1 或 事件2
    只要有一个事件成立,整个事件就成立
    #if [ `expr ${num} % 3` == 0 ]||[ `expr ${num} % 5` == 0 ]
    if [[ `expr ${num} % 3` == 0 || `expr ${num} % 5` == 0 ]]
    字符串运算符
    =、!=、
    -z $str:判断字符串是否存在,或者字符串是否都为空格
    $str:判断字符串不为空
    1)示例代码
    1 string="123"
    2 string1="123"
    3 if [ ${string} != ${string1} ]
    4 then
    5      echo "不相等"
    6 else
    7      echo "相等"
    8 fi
    2)示例代码
    1 string=" " 
    2 if [ -z ${string} ]
    3 then
    4      echo "为空"
    5 else
    6      echo "非空"
    7 fi
    8
    9 string1="xxx"
    10 if [ $string1 ]
    11 then
    12      echo "非空"
    13 else 
    14      echo "为空"
    15 fi
    文件运算符
    -e:exist判断文件是否存在
    -d:directory判断文件是否是目录文件
    -f:file判断一个文件是否是普通文件
    -r:read判断当前文件是否有读取权限
    -w:write判断文件是否有写入权限
    -x:判断文件是否有可执行权限
    1)代码示例
    1 if [ -f ~/practice1 ]
    2 then
    3       echo "是目录"
    4 else
    5       echo "不是"
    6 fi
    2)示例代码
    8 if [ -x ./19.sh ]
    9 then
    10     echo "有执行权限"
    11 else
    12       echo "没有"
    13 fi
    12``和${}的作用:取出结果集,可以是命令的结果集,还可以是运算的结果
    13、let关键字
    1 num1=1
    2 num2=2
    3 let num3=num1+num2
    4 echo "${num3}"
    13,输入一个变量
    实例代码
    read num
    printf "${num}"
    注意点:输入多个值的时候,尽量使用
    read num
    read num1
    14,三大流程控制
    1>顺序流程控制
    2>条件流程控制
    1)
    if [ 条件 ]
    then
    语句体
    fi
    2)
    if [ 条件 ]
    then
    语句体
    else
    语句体
    fi
    3)
    if [ 条件 ]
    then
    语句体
    elif
    then
    语句体
    elif
    then
    语句体
    else
    语句
    fi
    注意点:
    1)[]左右两边都要有空格
    2)else可以没有,也可以有,但是必须放在最后面
    >:gt
    >=:-ge
    <:-lt
    <=:-le
    ==:-eq
    !=:-ne
    g:grater
    t:than
    l:less
    e:equal
    eq:equal
    n:not
    case语句:
    case变量 in
    值1)
    语句体
    ;;
    值2)
    语句体
    ;;
    值3)
    语句体
    ;;
    值*)
    语句体
    ;;
    esac
    注意点:*)可以没有,如果有必须写在最后面,*)代表通配任何内容的值
    /*
    输入两个整数,再输入一个运算符,根据运算符的不同对两个数进行计算,输出运算结果,用case语句实现
    */
    3>循环流程控制
    while [ 条件 ]
    do
    语句体
    done
    练习:
    1)求1~100的偶数和,输出
    晚上作业:
    1>写一个命令求阶乘或是求和,比如说命令运行:
    ./xx.sh 6! 如果是这样运行就执行阶乘6x5x4x3x2x1
    ./xx.sh 6+ 如果是这样运行就执行阶乘6+5+4+3+2+1
    ./xx.sh -s 6
    ./xx.sh -f 6
    ./xx.sh -sf 6
    2>打印菱形,用while
                      *
                     ***
                   ******
                 *********
                   ******
                     ***
                       *
    3>使用while循环打印如图所示的直角三角形
     
    *
    **
    ***
    ****
    *****
    ******
    4>
    1x1=1
    1x2=2 2x2=4
    1x3=3 2x3=6 3x3=9
    ······
    1x9=9 2x9=18 3x9=27 4x9=36 ······9x9=81
    5>创建当天的文件夹
    myfile -y ~/practice/2017/
    myfile -m ~/practice/2017/01
    myfile -d ~/practice/2017/01/0104
    ~/practice/2017/01/0104  #年份文件/月份文件/当天日期的文件夹
    拿到年:date +%Y
    拿到月:date +%m
    拿到日:date +%d
    15、环境变量
    $#:指的是shell命令参数的个数,不算命令本身
    $0:代表命令本身
    $1:代表命令第一个参数值
    $2:代表命令第二个参数值
    ···
    $n:代表命令第n个参数值
    如果n>=10,必须要用${n}去取值
    怎么自己写一个解析xx.sh文件的脚本
    思路:
    1>判断执行哪个文件
    2>参数不能太多
    3>判断该文件是否存在
    4>判断是否是普通文件
    5>判断该文件是否是以.sh结尾的文件
    6>chmod +x xx.sh
    7>./xx.sh
    8>将这个命令全局有效
    如果 账号密码不为空
    把信息发信给服务器
    否则
    提示不能为空