『BASH』——Learn BashScript from Daniel Robbins——[001-002]
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
- #!/bin/bash
- if [ "${1##*.}" = "tar" ]
- then
- echo This appears to be a tarball.
- else
- echo At first glance, this does not appear to be a tarball.
- 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
- #!/usr/bin/env bash
- echo name of script is $0
- echo first argument is $1
- echo second argument is ${2}
- echo seventeenth argument is ${17}
- 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
- #!/usr/bin/env bash
- #allargs.sh
- for thing in "$@"
- do
- echo you typed ${thing}.
- done
$ allargs.sh hello there you silly
you typed hello.
you typed there.
you typed you.
you typed silly.
- if [[ "$myvar" -gt 3 ]]
- then
- echo "myvar greater than 3"
- fi
- if [[ "$myvar" == "3" ]]
- then
- echo "myvar equal 3"
- 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.
- if [ $myvar = "foo bar oni" ]
- then
- echo "yes"
- 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:
- if [ "$myvar" == "foo bar oni" ]
- then
- echo "yes"
- fi
OR:
- if [[ $myvar == "foo bar oni" ]]
- then
- echo "yes"
- fi
The best method:
- if [[ "$myvar" == "foo bar oni" ]]
- then
- echo "yes"
- 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
- #!/bin/env bash
- myvar=0
- while [[ "$myvar" -ne 10 ]]
- do
- echo $myvar
- myvar=$(( $myvar + 1 ))
- done
- #!/bin/env bash
- myvar=0
- until [[ $myvar -eq 10 ]]
- do
- echo $myvar
- myvar=$(( $myvar + 1 ))
- done
- tarview() {
- echo "Displaying contents of $@"
- for x in $@
- do
- if [[ "${x##*.}" == "tar" ]]
- then
- echo "(uncompressed tar $x)"
- cat $x | tar -tvf -
- elif [[ "${x##*.}" == "gz" ]]
- then
- echo "(gzip-compressed tar $x)"
- tar ztvf $x
- elif [[ "${x##*.}" == "bz2" ]]
- then
- echo "(bzip2-compressed tar $x)"
- cat $x | bunzip2 - | tar -tvf -
- fi
- done
- }
- myvar="hello"
- myfunc() {
- myvar="one two three"
- for x in $myvar
- do
- echo $x > /dev/null
- done
- }
- myfunc
- echo $myvar $x
- myvar="hello"
- myfunc() {
- local x
- local myvar="one two three"
- for x in $myvar
- do
- echo $x > /dev/null
- done
- }
- myfunc
- echo $myvar $x
『BASH』——Learn BashScript from Daniel Robbins——[001-002]的更多相关文章
- 『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 ...
- 『BASH』——文件权限批量恢复脚本——「Permission Revovery」
一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...
- 『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"
/*为节省时间,本文以汉文撰写*/ -前言- 深入学习正则表达式,可以很好的提高思维逻辑的缜密性:又因正则应用于几乎所有高级编程语言,其重要性不言而喻,是江湖人士必备的内功心法. 正则表达式概要(ob ...
- 『AngularJS』$location 服务
项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...
- [原创] 【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 ...
- JS 中通过对象关联实现『继承』
JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...
- 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】
今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...
- 『开源』Slithice 2013 服务器集群 设计和源码
相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...
- 『片段』OracleHelper (支持 多条SQL语句)
C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...
随机推荐
- excrt——cf687b
excrt的理解 问对于方程组x = ai % ci 的 通解 x+tM, (x+tM) % k 是否有唯一值 看tm%k是否==0即可 #include<cstdio> #include ...
- Sqli labs系列-less-2 详细篇
就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...
- VC内联汇编,引用程序中的变量
int a=5; //变量a _asm { mov eax,a; //将变量a的值放入寄存器eax add eax,eax; //相当于a=a+a mov a,eax; // ...
- [bzoj1706]奶牛接力跑 题解 (矩阵快速幂(或者叫倍增Floyd?))
Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...
- Python 中练习题涉及到的无穷大和无穷小问题。
首先来看一下所见的python联系题. inf = infinite 无限制的 float("inf")-1执行后的结果是:() A 1 B inf C -inf D 0 该考点考 ...
- 关于ios 的耳机线线控
如题 线控主要就是指的用ios耳机的 中间那个键来自定义一些程序自己的事件(比如玩吃鸡的时候,作为开枪扳机) 而想要控制耳机的音量加减的事件, 有一种方法,就是监听 系统音量的变化,根据音量变化来触 ...
- 13、testng.xml对用例进行分组
目录如下: TestGroup.java 代码如下: package com.testng.cn; import org.testng.annotations.*; import static org ...
- 1067 Sort with Swap(0, i) (25 分)
Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...
- SQL Serve2008的一些操作
今天花了一下午的时间在熟悉SQL serve的一些操作,在此记录下学习到的东西: 首先创建数据库: use master --设置当前数据库为master,以便方便访问表sysdatabases if ...
- Nginx学习——location和rewrite
location语法: location [=|~|~*|^~] /uri/ { … } 记住以下即可: 完全匹配(=) 无正则普通匹配(^~)(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续 ...