zoukankan      html  css  js  c++  java
  • Shell脚本学习笔记

    Shell简介:

    Shell是一个命令解释器,也可以看做为一种系统软件,提供了用户与内核之间进行交互的一种通道,它解释由用户输入的命令并且把它们送到内核去执行,执行效率高。

      1 #!/bin/bash
      2 
      3 # 第一个脚本
      4 # chmod +x ./test.sh   使脚本具有执行权限
      5 # ./test.sh            在当前目录下执行脚本
      6 # /bin/sh test.sh      指定解释器,执行脚本
      7 
      8 #echo "hello World!"
      9 
     10 
     11 #----------------------------------------------#
     12 # 第二个脚本
     13 # 声明变量、给变量赋值、声明变量为只读类型
     14 your_name="zhoufei"
     15 echo $your_name
     16 echo ${your_name}
     17 
     18 your_name="google"
     19 echo ${your_name}
     20 
     21 #readonly your_name
     22 your_name="声明为只读变量"
     23 
     24 # 字符串
     25 # ''输出纯字符串,有变量也失效
     26 # ""里面可以包含变量
     27 your_name2='baidu'
     28 str="hello I know your are "${your_name2}" ! 
    "
     29 echo ${str}
     30 
     31 # 字符串拼接
     32 your_name3="baidu3"
     33 greeting="I like "${your_name3}"! ---"
     34 greeting2="I like "$your_name3" ! 
    "
     35 echo ${greeting} ${greeting2}
     36 
     37 # 字符串长度
     38 echo "${your_name3} 长度是:${#your_name3}"
     39 
     40 # 子字符串
     41 your_name4='获取这个字符串的后三位'
     42 echo ${your_name4:8:3}
     43 
     44 # 查找子字符串
     45 your_name5="runoob is a great company"
     46 #echo `expr index "${your_name5}" is`
     47 
     48 # 数组
     49 echo "----------数组---------"
     50 array_name=(name1 name2 name3)
     51 echo "这是一个数组-${array_name[@]}"
     52 array_name[3]='name4'
     53 echo "这是一个数组-${array_name[@]}"
     54 echo "数组的长度:${#array_name[@]}"
     55 echo "数组中第0个元素的长度:${#array_name[0]}"
     56 
     57 # Shell传递参数 $n
     58 echo "----------Shell传递参数---------"
     59 echo 'Shell传递参数验证如下:'
     60 echo "文件名:$0"
     61 echo "第一个参数:$1"
     62 echo "第二个参数:$2"
     63 echo "脚本执行的进程ID号:$$"
     64 
     65 # Shell运算符
     66 # expr 是一个计算工具,完成表达式的求值操作
     67 val1=`expr 1 + 1`
     68 echo "expr 运算符的执行结果是$val1"
     69 
     70 # 算术运算符
     71 echo "----------算术运算符---------"
     72 a=10
     73 b=20
     74 val2=`expr $a + $b`
     75 val3=`expr $a - $b`
     76 val4=`expr $a * $b`
     77 val5=`expr $a / $b`
     78 val6=`expr $a % $b`
     79 echo "a + b : $val2"
     80 echo "a - b : $val3"
     81 echo "a * b : $val4"
     82 echo "a / b : $val5"
     83 echo "a % b : $val6"
     84 if [ $a == $b ]; then
     85     echo "a 等于 b"
     86 fi
     87 if [ $a != $b ]; then
     88     echo "a 不等于 b"
     89 fi
     90 
     91 # 关系运算符
     92 echo "----------关系运算符---------"
     93 if [[ $a -eq $b ]]; then
     94     echo "a 等于 b"
     95 fi
     96 if [[ $a -ne $b ]]; then
     97     echo "a 不等于 b"
     98 fi
     99 if [[ $a -gt $b ]]; then
    100     echo "a 大于 b"
    101 fi
    102 if [[ $a -lt $b ]]; then
    103     echo "a 小于 b"
    104 fi
    105 if [[ $a -ge $b ]]; then
    106     echo "a 大于等于 b"
    107 fi
    108 if [[ $a -le $b ]]; then
    109     echo "a 小于等于 b"
    110 fi
    111 
    112 # 布尔运算符 !、-o、-a
    113 echo "----------布尔运算符---------"
    114 if [[ $a != $b ]]; then
    115     echo "a 不等于 b"
    116 fi
    117 if [ $a -lt $b -o $a -eq $b ]; then
    118     echo "a 大于等于 b"
    119 fi
    120 if [ $a -gt 1 -a $b -lt 10 ]; then
    121     echo "a > 1 并且 b < 10"
    122 else
    123     echo "a > 1 并且 b < 10 是错误的!"
    124 fi
    125 
    126 # 逻辑运算符 && ||
    127 echo "----------逻辑运算符---------"
    128 if [[ $a -gt 1 && $a -lt 100 ]]; then
    129     echo "a 大于1 并且 a 小于100 成立"
    130 else
    131     echo "a 大于1 并且 a 小于100 不成立"
    132 fi
    133 if [[ $a -le 10 || $a -gt 100 ]]; then
    134     echo 'a 小于等于10 或者 a 大于 100 有一个成立'
    135 else
    136     echo 'a 小于等于10 或者 a 大于 100 都不成立'
    137 fi
    138 
    139 # 字符串运算符
    140 echo "----------字符串运算符---------"
    141 string1='string1'
    142 string2='string2'
    143 if [[ $string2 = $string1 ]]; then
    144     echo "string1 等于 string2"
    145 else
    146     echo "string1 不等于 string2"
    147 fi
    148 if [[ $string2 != $string1 ]]; then
    149     echo "string2 不等于 string1"
    150 fi
    151 if [[ -z $string1 ]]; then
    152     echo "string1 长度是:0"
    153 fi
    154 if [[ -n $string1 ]]; then
    155     echo "string1 长度不是:0"
    156 fi
    157 if [[ $string1 ]]; then
    158     echo "string1 不为nil"
    159 fi
    160 
    161 # 文件测试运算符
    162 echo "----------文件测试运算符---------"
    163 file1='假如为:文件'
    164 file2='假如为:文件夹'
    165 if [[ -d $file2 ]]; then
    166     echo '检测文件为文件夹'
    167 fi
    168 if [[ -f $file1 ]]; then
    169     echo '检测文件为普通文件'
    170 fi
    171 if [[ -s $file1 ]]; then
    172     echo '检测文件为空'
    173 fi
    174 if [[ -e $file1 ]]; then
    175     echo '检测文件为存在的'
    176 fi
    177 
    178 # echo命令
    179 echo "----------echo命令---------"
    180 echo "It is a test"
    181 echo ""It is a test""
    182 echo "下面换行 
    "
    183 echo -e "下面不换行 c"  # -e 开启转义 c 不换行
    184 echo "字符串重定向到文件中" > myfile
    185 echo '字符串原样输出 $a'
    186 echo `date` #显示执行结果
    187 
    188 # printf命令
    189 # printf  format-string  [arguments...]
    190 # %s %c %d %f都是格式替代符
    191 # %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
    192 # %-4.2f 指格式化为小数,其中.2指保留2位小数。
    193 # 
    换行  
    回车
    194 echo "----------printf命令---------"
    195 echo 'Hello, Shell,能够自动换行'
    196 printf "Hello, Shell,不能自动换行,需要手动加换行符 
    "
    197 printf "%-10s %-8s %-4s
    " 姓名 性别 体重
    198 printf "%-10s %-8s %-4.2f
    " 郭靖 男 66.12345
    199 printf "%-10s %-8s %-4.2f
    " 杨过 男 77.12345
    200 
    201 # test命令
    202 # Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
    203 echo "----------test命令---------"
    204 test1=100
    205 test2=101
    206 testString1='testString1'
    207 testString2='testString2'
    208 if test $test1 -lt $test2 ; then
    209     printf "%s
    " test1小于test2 
    210 fi
    211 if test -z testString1 ; then
    212     printf "testString1长度为0"
    213 else
    214     printf "testString1长度不为0 ,:%s
    " testString1
    215 fi
    216 if test -e ./test1.sh ; then
    217     printf "文件名:test1.sh 存在
    "
    218 else
    219     printf "文件名:test1.sh 不存在
    "
    220 fi
    221 
    222 # Shell流程控制
    223 echo "----------Shell流程控制---------"
    224 # if else-if else
    225 if [[ $a == $b ]]; then
    226     echo "a 等于 b"
    227 elif [[ $a -gt $b ]]; then
    228     echo "a 大于 b"
    229 elif [[ $a -lt $b ]]; then
    230     echo "a 小于 b"
    231 else
    232     echo "没有符合条件的"
    233 fi
    234 num1=$[2*3]
    235 num2=$[1+5]
    236 if  test $num1 -eq $num2 ; then
    237     echo "num2 等于 num1"
    238 else
    239     echo "num1 不等于 num2"
    240 fi
    241 # for 循环
    242 for loop in  1 2 3 4 5 6; do
    243     # echo "当前输入的值是:$loop"
    244     printf "当前输入的值是:%s
    " $loop 
    245 done
    246 for string in 'This is a String!'; do
    247     echo "$string"
    248 done
    249 # while 语句
    250 # let 命令,它用于执行一个或多个表达式
    251 ignore0(){
    252     count=1;
    253     while [[ $count -lt 10 ]]; do
    254         echo "while 执行结果:$count"
    255         let "count++"
    256     done
    257     echo '按下 <CTRL-D> 退出'
    258     echo -n '输入你最喜欢的电影名: '
    259     while read Film ; do
    260         echo "是的! $Film 是一部好电影!"
    261     done
    262 }
    263 #ignore0
    264 ignore1(){
    265     while true:
    266     do
    267         echo "无限循环!"
    268     done
    269     until false ; do
    270         echo "无限循环!"
    271     done
    272 }
    273 #ignore1
    274 # case语句
    275 ignore2(){
    276     echo '请输入1到4之间的数字'
    277     echo '你输入的数字是:'
    278     read aNum
    279     case $aNum in
    280         1 )
    281      echo "输入的数字为:$aNum"
    282         ;;
    283         2 )
    284      echo "输入的数字为:$aNum"
    285         ;;
    286         3 )
    287      echo "输入的数字为:$aNum"
    288         ;;
    289         4 )
    290      echo "输入的数字为:$aNum"
    291         ;;
    292         * )
    293      echo "你输入的数字不在1-4之间"
    294         ;;
    295     esac
    296 }
    297 #ignore2
    298 # break命令
    299 ignore3(){   
    300     while true
    301     do
    302         echo '输入1-5之间的数据'
    303         read aNum
    304         case $aNum in
    305             1|2|3|4|5 )
    306              echo "输入的数字为:$aNum"
    307                 ;;
    308             * )
    309              echo "你输入的数字不在1-4之间"
    310              break
    311              #continue
    312              echo "游戏结束"
    313             
    314         esac
    315     done
    316 }
    317 #ignore3
    318 # Shell 函数
    319 echo "----------Shell 函数---------"
    320 demoFunc(){
    321     echo '这是第一个函数'
    322 }
    323 echo '第一个函数开始'
    324 demoFunc
    325 echo '第一个函数结束'
    326 funWithReture(){
    327     echo '这个函数会对输入的参数进行加法运行...'
    328     echo '输入第一个参数:'
    329     read para1
    330     echo '输入第二个参数:'
    331     read para2
    332     echo "两次输入的参数分别是:$para1---$para2"
    333     return $(($para1+$para2))
    334 }
    335 funWithReture 
    336 echo "输入的数字之和为:$?"
    337 
    338 # Shell 输入/输出重定向
    339 echo "----------Shell 输入/输出重定向---------"
    340 date >> myfile
    341 cat myfile
    342 wc -l << EOF
    343 标题
    344 测试 Head Document 类型
    345 的追加重定向命令
    346 EOF
    347 ls > myfile 2>&1
    348 ls > /dev/null 2>&1
    349 
    350 # Shell 文件包含
    351 echo "----------Shell 文件包含---------"
    352 source ./test2.sh
    353 echo "引用外部的test2.sh文件中的url变量,URL变量为:$url"
  • 相关阅读:
    数据结构问题总结
    基础dp问题总结
    搜索问题总结
    二分+贪心check问题总结
    基础图论问题总结
    数学问题总结
    匹配与网络流学习笔记(在学习中)
    我的第一篇题解
    python+Sqlite+Dataframe打造金融股票数据结构
    用Pandas Dataframe来抓取重构金融股票的各种业务&数据形态
  • 原文地址:https://www.cnblogs.com/zhou--fei/p/6583098.html
Copyright © 2011-2022 走看看