1)定义变量

myvar=abc #注:等号前后不能加空格
#或
myvar="abc"
#或
myvar='abc'
#注:如果变量后面的值中间本身没有空格,加不加引号都无所谓,但值本身如果有空格,则引号是必须的,比如:
myvar='abc 123'

  

2) 使用变量
echo $myvar

完整示例:

#!/usr/bin/env bash
myvar1='ddddddd 111'
echo 'myvar1='$myvar1
echo 'myvar1=$myvar1' #注意这一行跟上一行的区别
myvar2="this is a second var,and the value of myvar1 is:$myvar1" #变量本身可以再引用其它变量
echo $myvar2
echo 'this var is not exist:'$not_exist_var #引用不存在的变量不会报错,但相应的位置输出为空

输出:

myvar1=ddddddd 111
myvar1=$myvar1
this is a second var,and the value of myvar1 is:ddddddd 111
this var is not exist:

3) printf格式化输出
echo的输出功能有点弱,更常用的是printf,示例如下:

printf 'hi,%s. I am a %d years old boy.\n' jimmy 6

输出:

hi,jimmy. I am a 6 years old boy.

注:%s表示这里是一个字符串占位符,%d表示这里是一个10进制整数占位符,另外还有一个常用的占位符号%f表示浮点数,还可以给它加精度,比如%0.2f表示小数位最多2位。

4) 参数引用
shell脚本运行时,可以接受参数,类似 xx.sh a b c,脚本内容可用$1,$2...来引用,示例;

printf 'arg1:%s \narg2:%s\n' $1 $2

将上面这行,保存成test.sh,然后chmod +x test.sh(赋给可执行权限)

然后
./test.sh a b 将输出:
arg1:a
arg2:b

5) 重定向与管道
先准备一个xml文件demo.xml,内容如下:

<data>
<item>aaa</item>
<item>bbb</item>
</data>

然后在终端里输入命令:

tr -d '\n\t' < demo.xml

将得到输出:

<data><item>aaa</item><item>bbb</item></data>

是不是很神奇,解释一下:

tr是linux上内置的一个命令, -d 是 -delete的缩写,表示删除字符, < demo.xml,表示将demo.xml作为tr处理的标准输入,
所以整个命令行的含义为:从demo.xml读取内容作为输入,然后将\n\t字符删除掉。
再来点变化 :

tr -d '\n\t' < demo.xml > demo-output.xml

注意多出的> demo-output.xml,表示将处理的结果,输出到demo-output.xml,所以:

< 表示改变标准输入
> 表示改变标准输出
另外还有一个符号: >> 即连续二个大于号,示例:

printf 'a\n' >> a.txt
printf 'b\n' >> a.txt

然后用 cat a.txt看下文件内容:

a
b
所以>>表示将输出内容追加到目标文件(注:目标文件若不存在,将自动追加)

管道操作符 |
示例:

ls | wc -l

ls是list的缩写,wc即word count表示计数,上面的意思是ls的输出结果,作为 wc -l的输入,最终的效果就是统计当前目录下的文件个数

bash/shell编程学习(1)的更多相关文章

  1. bash/shell编程学习(3)

    接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...

  2. bash/shell编程学习(2)

    先来复习上节重定向的用法: 1.快速清空文件 cat demo.txt < /dev/null 注:linux中有一个经典名言[一切皆文件],/dev/null可以认为是一个特殊的空文件,更形象 ...

  3. Bash脚本编程学习笔记08:函数

    官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...

  4. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  5. abc高级bash shell编程

    http://www.pythoner.com/122.html     abc高级bash shell编程

  6. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  7. linux 10 -Bash Shell编程

    二十三. Bash Shell编程:     1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...

  8. Bash脚本编程学习笔记06:条件结构体

    简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...

  9. shell编程学习之使用jq对json数据进行提取

    shell编程学习之使用jq对json提取 jq命令允许直接在命令行下对JSON进行操作,包括分片.过滤.转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上.预编译的二进制文件可以 ...

随机推荐

  1. JavaScript实现通过的集合类

    集合是一种数据结构,用以表示非重复值的无序集合.集合的基础方法包括添加值.检测值是否在集合中,这种集合需要一种通用的实现,以保证操作效率. JavaScript的对象是属性名以及与之对应的值的基本集合 ...

  2. POI导入导出

    一.使用POI导出Execl表格 需要的jar包 package cn.yxj.poi; import java.io.FileOutputStream; import java.util.Date; ...

  3. XML序列化和反序列化

    上篇总结了下JSON的序列化和反序列化,博园中大牛给了很多牛叉的评论,学习了不少. 不过在上篇中忘了把json序列化和反序列化的另外一种方式写上去了,这里做个简单的补充: Json篇:http://w ...

  4. JS代码和OC代码的相互调用

    JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...

  5. sqlite 管理软件

    ★SQLite的官方网站 http://www.sqlite.org/ ★SQLite的官方网址提供数据库查看软件:http://www.sqlite.org/cvstrac/wiki?p=Manag ...

  6. iOS时间个性化设置设置

    现在在很多项目中,不会直接显示时间,很多时候都是显示“刚刚”,”XX分钟前”,等等字样,那么他们是怎么实现的呢 ? .新建一个NSDate的类目:NSDate+XMGExtension NSDate+ ...

  7. C#委托的介绍(delegate、Action、Func、predicate) --转载

    来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

  8. MapRedue开发实例

    一些例子,所用版本为hadoop 2.6.5 1.统计字数 数据格式如下(单词,频数,以tab分开): A 100 B 97 C 98A 98 package com.mr.test; import ...

  9. 基于php基础语言编写的小程序之计算器

    基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...

  10. CentOS配置Nginx+Tomcat7的多站点支持

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在这之前需要先把Nginx和Tomcat安装好,具体见:<CentOS安装Nginx-1.6.2+安全配置&g ...