ABSTRACT:

  Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM developerWorks articles about Linux. Daniel currently serves as Benevolent Dictator for Life (BDFL) of Funtoo Linux. Funtoo Linux is a Gentoo-based distribution and continuation of Daniel's original Gentoo vision.


Section 1


$ myvar='This is my environment variable!'

$ echo $myvar

This is my environment variable!

$ echo foo$myvarbar

foo

$ echo foo${myvar}bar

fooThis is my environment variable!bar

$ echo foo"${myvar}"bar

fooThis is my environment variable!bar

$ echo foo"$myvar"bar

fooThis is my environment variable!bar

$ basename /usr/local/share/doc/foo/foo.txt

foo.txt

$ basename /usr/home/drobbins

drobbins

$ dirname /usr/local/share/doc/foo/foo.txt

/usr/local/share/doc/foo

$ dirname /usr/home/drobbins/

/usr/home

$ MYFILES=$(ls /etc | grep pa)

$ echo $MYFILES

pam.d passwd

$ MYFILES=$(ls $(dirname foo/bar/oni))

  NOTE:$( ) is generally preferred over ` ` in shell scripts,because it is more universally supported across different shells,it is less complicated to use in a nested form.

$ MYVAR=foodforthought.jpg

$ echo ${MYVAR##*fo}

rthought.jpg

$ echo ${MYVAR#*fo}

odforthought.jpg

$ MYFOO="chickensoup.tar.gz"

$ echo ${MYFOO%%.*}

chickensoup

$ echo ${MYFOO%.*}

chickensoup.tar

$ MYFOOD="chickensoup"

$ echo ${MYFOOD%%soup}

chicken

  • $ MYFOOD="soupchickensoup"
  • $ echo ${MYFOOD%soup}
  • soupchicken
  • $ echo ${MYFOOD%%soup}
  • soupchicken

$ EXCLAIM=cowabunga

$ echo ${EXCLAIM:0:3}

cow

$ echo ${EXCLAIM:3:5}

abung

  • $ echo ${EXCLAIM:3}
  • abunga

  NOTE:standard format is ${VAR:offset:length},if there is no ":length" given,then default to the end of the original variable

$ MYFOOD="chickensoup and another dogsoup"

$ echo ${MYFOOD/soup/rubbish}

chickenrubbish and another dogsoup

$ echo ${MYFOOD//soup/rubbish}

chickenrubbish and another dogrubbish

  1. #!/bin/bash
  2. if [ "${1##*.}" = "tar" ]
  3. then
  4.    echo This appears to be a tarball.
  5. else
  6.    echo At first glance, this does not appear to be a tarball.
  7. fi

$ ./mytar.sh thisfile.tar

This appears to be a tarball.

$ ./mytar.sh thatfile.gz

At first glance, this does not appear to be a tarball.


Section 2


  1. #!/usr/bin/env bash
  2.   echo name of script is $0
  3.   echo first argument is $1
  4.   echo second argument is ${2}
  5.   echo seventeenth argument is ${17}
  6.   echo number of arguments is $#

  NOTE:bash features the "$@" variable, which expands to all command-line parameters separated by spaces.
  NOTE:“$*”,not be separated,as one new parameter

  1. #!/usr/bin/env bash
  2. #allargs.sh
  3. for thing in "$@"
  4. do
  5.   echo you typed ${thing}.
  6. done

$ allargs.sh hello there you silly

you typed hello.
you typed there.
you typed you.
you typed silly.

  1. if [[ "$myvar" -gt 3 ]]
  2. then
  3.    echo "myvar greater than 3"
  4. fi
  1. if [[ "$myvar" == "3" ]]
  2. then
  3.   echo "myvar equal 3"
  4. fi

  NOTE:In the above two comparisons do exactly the same thing, but the first uses arithmetic comparison operators, while the second uses string comparison operators.

  NOTE:the second can't be used to [[ "$myvar" > "10" ]],because "2" is larger than "10" in the comparision of string.

  1. if [ $myvar = "foo bar oni" ]
  2. then
  3.    echo "yes"
  4. fi  output  [: too many arguments

  NOTE:In this case, the spaces in "$myvar" (which equals "foo bar oni") end up confusing bash. After bash expands "$myvar", it ends up with the following comparison:[ foo bar oni = "foo bar oni" ].

  Because the environment variable wasn't placed inside double quotes, bash thinks that you stuffed too many arguments in-between the square brackets. You can easily eliminate this problem by surrounding the string arguments with double-quotes or use double square brackets. Remember, if you get into the habit of surrounding all string arguments and environment variables with double-quotes, you'll eliminate many similar programming errors. Here's how the "foo bar oni" comparison should have been written:

  1. if [ "$myvar" == "foo bar oni" ]
  2. then
  3.   echo "yes"
  4. fi

OR:

  1. if [[ $myvar == "foo bar oni" ]]
  2. then
  3.   echo "yes"
  4. fi

The best method:

  1. if [[ "$myvar" == "foo bar oni" ]]
  2. then
  3.   echo "yes"
  4. fi  SO!!! use [[ ]] instead of [ ]

$ echo $(( 100 / 3 ))

33

$ myvar="56"

$ echo $(( $myvar + 12 ))

68

$ echo

$(( $myvar - $myvar ))

0

$ myvar=$(( $myvar + 1 ))

$ echo $myvar

57

  1. #!/bin/env bash
  2. myvar=0
  3. while [[ "$myvar" -ne 10 ]]
  4.   do
  5.   echo $myvar
  6.   myvar=$(( $myvar + 1 ))
  7. done
  1. #!/bin/env bash
  2. myvar=0
  3. until [[ $myvar -eq 10 ]]
  4. do
  5.   echo $myvar
  6.   myvar=$(( $myvar + 1 ))
  7. done
  1. tarview() {
  2.   echo "Displaying contents of $@"
  3.   for x in $@
  4.     do
  5.     if [[ "${x##*.}" == "tar" ]]
  6.     then
  7.       echo "(uncompressed tar $x)"
  8.       cat $x | tar -tvf -
  9.     elif [[ "${x##*.}" == "gz" ]]
  10.     then
  11.       echo "(gzip-compressed tar $x)"
  12.       tar ztvf $x
  13.     elif [[ "${x##*.}" == "bz2" ]]
  14.     then
  15.       echo "(bzip2-compressed tar $x)"
  16.       cat $x | bunzip2 - | tar -tvf -
  17.     fi
  18.   done
  19. }
  1. myvar="hello"
  2. myfunc() {
  3.   myvar="one two three"
  4.   for x in $myvar
  5.   do
  6.     echo $x > /dev/null
  7.   done
  8. }
  9. myfunc
  10. echo $myvar $x
  1. myvar="hello"
  2. myfunc() {
  3.   local x  
  4.   local myvar="one two three"
  5.   for x in $myvar
  6.   do
  7.     echo $x > /dev/null
  8.   done
  9. }
  10. myfunc
  11. echo $myvar $x

『BASH』——Learn BashScript from Daniel Robbins——[001-002]的更多相关文章

  1. 『BASH』——Learn BashScript from Daniel Robbins——[003]

    ABSTRACT: Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM develop ...

  2. 『BASH』——文件权限批量恢复脚本——「Permission Revovery」

    一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...

  3. 『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"

    /*为节省时间,本文以汉文撰写*/ -前言- 深入学习正则表达式,可以很好的提高思维逻辑的缜密性:又因正则应用于几乎所有高级编程语言,其重要性不言而喻,是江湖人士必备的内功心法. 正则表达式概要(ob ...

  4. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  5. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  6. JS 中通过对象关联实现『继承』

    JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...

  7. 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】

    今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...

  8. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...

  9. 『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...

随机推荐

  1. A. Srdce and Triangle--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)

    如下图这是“今日头条杯”首届湖北省大学程序设计竞赛的第一题,作为赛后补题 题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 Let  be a regualr tr ...

  2. 在Windows Server2016中安装SQL Server2016(转)

    在Windows Server2016中安装SQL Server2016(转) 转自: http://blog.csdn.net/yenange/article/details/52980135 参考 ...

  3. thinkphp+layui多图上传(1)thinkphp5+layui实现多图上传保存到数据库,可以实现图片自由排序,自由删除。

    公共css代码 <style> .layui-upload-img { width: 90px; height: 90px; margin: 0; } .pic-more { width: ...

  4. 关于swiper动态更改,无法更新的悖论

    关于swiper动态更改,无法更新的悖论 以前都觉得swiper的使用很简单,那是因为使用swiper时都是写的数据,按照官网上介绍直接初始化swiper,随便丢一个地方初始化就ok了,但是在很多需求 ...

  5. 制作Lightbox效果

    制作Lightbox效果 Lightbox是网页上常用的一种效果,比如单击网页上某个链接或图片,则整个网页会变暗,并在网页中间弹出一个层来.此时,用户只能在层上进行操作,不能在单击变暗的网页. 程序代 ...

  6. Tomcat运行错误示例二

    Tomcat运行错误示例二 当遇到这种错误时,一般是构建路径的问题,按步骤来就好.如图: 点击---->库---->Add Library---->下一步---->选择tomc ...

  7. linux jps命令

    原文链接: http://www.cnblogs.com/qlqwjy/p/7928410.html https://blog.csdn.net/u013250071/article/details/ ...

  8. 浏览器获取自定义响应头response-headers

    原创作品版权归属本人所有,违者必究 https://blog.csdn.net/qq_37025445/article/details/82888731想在浏览器获取响应头里面自定义的响应头:file ...

  9. Day 21 python :面向对象 类的相关内置函数 /单例模式 /描述符

    1.isinstance(obj,cls) 检查obj是否是类cls的对象: 备注:用isinstance 的时候,产生实例后,会显示实例既是父类的实例,也是子类的实例 class Mom: gend ...

  10. html5本地存储(一)------ web Storage

    在html5中与本地存储相关的两个相关内容:Web Storage  与本地数据库 web Storage存储机制是对html4中的cookie存储机制的一个改善.web Storage就是在web上 ...