shell脚本学习day01

1、第一个Shell程序
1.1 创建Shell文件
    命令:touch hello.sh
1.2 编写Shell程序
    定义文件声明
     #!/bin/bash
     echo "Hello word"
        #!:表示约定标记,他会告诉系统这个脚本需要什么样子的解释器来执行,即是一种脚本体现
        echo:表示命令用于输出文本信息
1.3 修改文件权限
    查看每一部分权限  命令 ls -l hello.sh
    修改文件权限  chmod +x ./hello.sh
1.4 执行Shell脚本文件
    命令: ./hello.sh

 2Shell脚本语法 注释
 “#” 表示注释
注意:在Shell脚本中,没有多行注释,只有单行注释

3Shell脚本语言-变量
3.1 变量定义-注意事项
注意二:变量名和等号不能够有空格(和我们的一般语言不一样)
注意三:变量名首字母必须是字母或者下划线
注意四:变量名中间不允许有空格
注意五:不允许使用标点符号
3.2 只读变量
    关键字 :readonly(只读,不能够修改)
3.3 删除变量
    语法:unset
    案例:unset 变量名
3.4 变量类型
    3.4.1 类型一:本地变量
    作用域整个bash进程可以使用
    语法:name="smile2018"
    3.4.2 类型二:局部变量
    作用域:当前代码段(修饰符:local)
    3.4.3 类型三:环境变量
    作用域:当前shell进程以及子进程
    语法:export name=“hello”
    3.4.4类型四位置变量
     name=${0}
     age=${1}
     sex=${2}
     echo "姓名:${name} 年龄:${age} 性别:${sex}"
     执行脚本: 
      ./hello.sh tom 23 男
     执行结果:  姓名:./hello.sh 年龄:tom 性别:23
                ${0}表示脚本文件名称 参数从1开始
    3.4.5 特殊变量
    ${0}-特殊变量-文件名称
    ${?} 表示返回上一个命令执行状态返回值
     0:表示执行成功
     1:程序执行结果
     2:表示程序状态返回码(0-255)
     系统预留错误(1,2,127)
     echo ${0}
     echo ${?}
     $# -参数个数
     $* -参数列表
     $@ -参数列表
     $$ -后去当前shell进行ID
     $! -执行上一个指令PID
    $*和$@区别
    $* 参数列表:将所有的参数组成一个字符串
    $@ 参数列表:字符串分开

4Shell脚本语言-字符串
4.1字符串-单引号
4.2字符串-双引号
4.3字符串-拼接
脚本代码
     name="Andy"
     age=100
     sex="男"
     info="${name}${age}${sex}"
     echo ${info}
执行结果
    Andy100男

脚本代码
     name="Andy"
     age=100
     sex="男"
     info="姓名:"${name}" 年龄:"${age}" 性别:${sex}"
     echo ${info}
执行结果
    姓名:Andy 年龄:100 性别:男

4.4字符串-获取字符串长度
    语法结构:${#变量名}
    脚本代码
         name="Andy"
         echo ${#name}
    脚本结果
            4
4.5 字符串-截取
    语法:${变量名:开始位置:截取长度}
    脚本代码
    案例1:从字符串第四个开始截取,截取3个
     name="my name is XQ"
     result=${name:3:3}
     echo ${result}
    案例2:从字符串第5个开始截取,到最后一个结束
        方式1:
             name="my name is XQ"
             length=${#name}
             result=${name:4:length-1}
             echo ${result}
        方式2:
             name="my name is XQ"
             result=${name:4}
             echo ${result}
    4.6字符串-删除
    语法一:$(变量名#删除字符串 正则表达式)
    作用:从字符串开头(左边),开始匹配要删除的字符串
    案例1:
         name="my name is XQ"
         result=${name#XQ}
         echo ${result}
        原因:匹配不到
    案例2:
         name="my name is XQ"
         result=${name#my}
         echo ${result}
    案例3:查找指定字符第一个,并且删除前面所有的字符(包含自己)
         name="my name is XQ"
         result=${name#*X}
         echo ${result}
    语法二: $(变量名##删除字符串 正则表达式)
    作用:从字符串尾(右边)开始匹配要删除字符串
    案例一
         name="my name is XQ"
         result=${name##*X}
         echo ${result}
    总结:语法1和语法2,都是从左边删除到右边,查找方向不一样
    语法三:${变量名%删除字符串 正则表达式}
    从字符串结尾开始匹配,删除匹配的字符串
    案例1:查找第一个字符(匹配第一个)
        代码一:
             name="my name is XQ"
             result=${name%Q}
             echo ${result}
    案例2:查找指定字符第一个,并且删除前面所有字符(包含自己)
             name="my name is XQ"
             result=${name%m*}
             echo ${result}

     语法四:$(变量名%%删除字符串 正则表达式)
     案例1:查找指定字符最后一个,并且删除前面所有的字符(包含自己)
         name="my name is XQ"
         result=${name%%m*}
         echo ${result}

    总结:从左边删除到右边
                 #-表示查询方向从左到右
                 ##-表示查询方向从右到左
        从右边删除到左边
                %-表示查询方向从右到左
                %%-表示查询方向从左到右

#!/bin/bash
#a=1
#b=2
#加法运算
#c=`expr $a + $b`
#输出a+b的和
#echo "值为: $c"
#加法运算
#c=`expr $a - $b`
#输出a-b的差
#echo "值为: $c"
#乘法运算
#c=`expr $a \* $b`
#输出a*b的值
#echo "值为: $c"
#除法运算
#c=`expr $b / $a`
#输出b/a的值
#echo "值为: $c"
#"%"运算
#c=`expr $b % $a`
#输出b%a的值
#echo "值为: $c"
#"+"运算
#c=$b
#echo $c
#"=="运算
m=1
n=1
#if [ $a == $b ]
#then
#	echo "a等于b"
#else
#	echo "a不等于b"
#fi
#if [ $m == $n ]
#then
#        echo "m等于n"
#else
#        echo "m不等于n"
#fi

#"-ne"检测两个数是否相等 不相等返回true
#if [ $a -ne $b ]
#then
#	echo "a不等于b"
#else
#	echo "a等于b"
#fi

#"-gt"检测左边数是否大于右边数,如果是返回true
#if [ $b -gt $a ]
#then
#	echo "b大于a"
#else
#	echo "b小于a"
#fi

#"-lt"检测左边数是否小于右边数,如果是返回true
#if [ $a -lt $b ]
#then
#       echo "a小于b"
#else
#       echo "b小于a"
#fi

#"-ge" 检测左边数据是否(大于+等于)右边数 如果是,返回true
     #if [ $a -ge $b ]
     #then
      #  echo "a大于等于b"
     #else
      #  echo "a小于b"
     #fi

#"-le":检测左边数是否(小于+等于)右边数,如果是返回true
     #if [ $a -le $b ]
    # then
   #     echo "a小于等于b"
  #   else
 #       echo "a大于b"
#     fi

#"!":非运算,表达式true,返回true,否则返回false
#     if [ $a != $b ]
#     then
#        echo "a不等于b"
#     fi


#"-o":或运算,有一个表达式为true,则返回true
#     a=100
#     b=200
#     if [ $a -lt 200 -o $b -gt 200 ]
#     then
#        echo "成立"
#     fi
#"-a" 与运算。两个表达式为true,则返回true
#     a=100
#     b=200
#     if [ $a -lt 200 -a $b -ge 200 ]
#     then
#        echo "成立"
#     else
#        echo "不成立"
#     fi

#逻辑运算符 "&&":逻辑且 -and
#     a=100
#     b=200
#     if [ $a -lt 200 -a $b -gt 200 ]
#     then
#        echo "成立"
#     else
#        echo "不成立"
#     fi

#"||":逻辑OR
#     a=100
#     b=200
#     if [ $a -lt 200 ] || [ $b -gt 200 ]  
#     then
#        echo "成立"
#     else
#        echo "不成立"
#     fi

#"=":检测两个字符串是否相等,如果相等返回true
#     a="aa"
#     b="bb"
#     if [ $a = $b ]
#     then
#        echo "字符串a等于字符串b"
#     else
#        echo "字符串a不等于字符串b"
#     fi

#"!=" 检测两个字符串是否相等,如果不相等返回true
#     a="aa"
#     b="bb"
#     if [ $a != $b ]
#     then
#        echo "字符串a不等于字符串b"
#     else
#        echo "字符串a等于字符串b"
#     fi

#"-z": 检测字符串长度是否为0,如果是返回true
#     a="aa"
#     if [ -z $a ]
#     then
#        echo "a不存在值"
#     else
#        echo "a不为空,存在"
#     fi


#"-n":检测字符串长度是否为0, 如果不是0,返回true
#     a="aa"
#     if [ -n "$a" ]
#     then
 #       echo "a不为空,存在"
 #    else
 #       echo "a不存在值"
 #    fi


#"字符串":检测字符串是否为空,不为空返回true
#     a="aa"
#     if [ $a ]
#     then
#        echo "a不为空"
#     else
#        echo "a为空"
#     fi
#



#文件测试运算符
#     file="/home/shelldir/conditshell.sh"
#     file2="/home/shelldir"
#     if [ -d $file2 ]
#     then
#        echo "是一个目录"
#     else
#        echo "不是一个目录"
#     fi
#
#


#"-r file":检测文件是否可读,如果是,那么返回true
#     file="/home/shelldir/conditshell.sh"
#     if [ -r $file ]
#     then
#        echo "可读"
#     else
#        echo "不可读"
#     fi
#


#"-w file":检测文件是否可写,如果是,那么返回true
#     file="/home/shelldir/conditshell.sh"
#     if [ -w $file ]
#     then
#        echo "可写"
#     else
#        echo "不可写"
#     fi
#

#"-x file“:检测文件是否是可执行文件,如果是返回true
##     file="/home/shelldir/conditshell.sh"
#     if [ -x $file ]
#     then
#        echo "可执行"
#     else
#        echo "不可执行"
#     fi

#"-f file":检测文件是否是一个普通文件(是目录为false,是普通文件为true),如果是,那么返回true
#     file="/home/shelldir"
#     if [ -f $file ]
#     then
#        echo "文件为普通文件"
#     else
#        echo "文件为特殊文件"
#     fi
#


#"-s file":检测文件是否为空(文件有内容),如果是,那么返回true
#     file="/home/shelldir/conditshell.sh"
#     if [ -s $file ]
#     then
#        echo "文件有内容"
#     else
#        echo "文件没有内容"
#     fi
#

#"-e file":检测文件是否存在(包含了:目录和文件),如果是,返回true
#     file="/Users/Wisdom/Desktop/进阶代码/流媒体/第三天/hello.sh"
#     if [ -e $file ]
#     then
#        echo "存在"
#     else
#        echo "不存在"
#     fi
#
#

#"if"语句
##    代码结构
#         a="aa"
#         b="aa"
#         if [ $a == $b ]
#         then
#            echo "字符串a等于字符串b"
#         fi
#


#"if else"语句
#代码结构
#         a="aa"
#         b="bb"
#         if [ $a = $b ]
#         then
#            echo "字符串a等于字符串b"
#         else
#            echo "字符串a不等于字符串b"
#         fi

#"if-else-if-else"
#         a="aa"
#         b="bb"
#         if [ $a = $b ]
#         then
#            echo "字符串a等于字符串b"
#         elif [ $a ]
#         then
#            echo "字符串a不能为空"
#         else
#            echo "字符串a不等于字符串b"
#         fi
#
#
#


# "case"语句
#         number=2
#         case $number in
#         1)
#            echo "等于1"
#         ;;
#         2)
#            echo "等于2"
#         ;;
#         3)
#            echo "等于3"
#         ;;
#         esac
#
#




#"while"循环
#         a=1
#         while(($a<3))
#         do
#            echo $a
#            a=`expr $a + 1`
#         done

#"for"循环语句
#     语法变量
#        for 变量名 in item1 item2 item2...
#        do
#            代码
#        done
#    代码案例一
         for name in "aa" "bb" "cc"
         do
            echo $name
         done






cat 介绍
作用:
     作用一:查看文件内容
     作用二:连接文件
     作用三:创建一个文件或者多个文件
     作用四:重定向输出到终端
     作用五:重定向到文件

语法:cat[选项][文件]
案例演示
    案例一:查看文件内容
     cat fileA.sh
     案例二: cat -n A.sh
        -n选项:可以显示文件内容和行号
     案例三: cat -b A.sh
        -b选项:和“-n”类似功能,但是只标记非空白行行号
     案例四: cat -e A.sh
        -e选项:在每一行内容最后加入了一个“$”符号,在需要将多行内容转换为一行内容的时候,非常有用
     案例五:cat
        接受标准输入,同时还会输出标准输出(敲回车键)
        退出:control + C
[root@hadoop01 shelldir]# vim readshell.sh 

 #        testFunc
 #        echo "调用后"


#Shell脚本语言-输入、输出重定向
#
#   1、 输入重定向
#    语法结构:wc 文件名称
#    1.1 "<" 输入重定向
#        命令代码:wc A.sh
#        将A.sh中的内容读取到控制台
#        wc读取到了三个重要信息
#            第一个参数:文本行数
#            第二个参数:文本词数
#            第三个参数:文本字节数
#        93  192 2028 readshell.sh

#输出重定向
# ">": 我们把方向指向一份文件,那么将文件中的内容删除,写入新的内容
#脚本文件A.sh代码
             #!/bin/bash
             echo "我是文件A"
#脚本文件B.sh代码
             #!/bin/bash
             echo "我是文件B"
             echo "北京欢迎你" > A.sh
#执行脚本代码
            ./B.sh

#总结:替换内容-B.sh输出内容替换了A.sh中内容
# ">>" 追加

[root@hadoop01 shelldir]# vim hello_b.sh 

#!/bin/bash
echo "我是hello_b"
#将"北京欢迎你"替换掉hello.sh文件的所有内容
#echo "北京欢迎你" > hello.sh
#将"北京欢迎你"追加到hello.sh文件尾部
echo "北京欢迎你" >> hello.sh

[root@hadoop01 shelldir]# vim hello.sh 

#!/bin/bash
echo "我是hello.sh文件"
北京欢迎你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值