bash/shell编程学习(1)
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)的更多相关文章
- bash/shell编程学习(3)
接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...
- bash/shell编程学习(2)
先来复习上节重定向的用法: 1.快速清空文件 cat demo.txt < /dev/null 注:linux中有一个经典名言[一切皆文件],/dev/null可以认为是一个特殊的空文件,更形象 ...
- Bash脚本编程学习笔记08:函数
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- abc高级bash shell编程
http://www.pythoner.com/122.html abc高级bash shell编程
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- linux 10 -Bash Shell编程
二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...
- Bash脚本编程学习笔记06:条件结构体
简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...
- shell编程学习之使用jq对json数据进行提取
shell编程学习之使用jq对json提取 jq命令允许直接在命令行下对JSON进行操作,包括分片.过滤.转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上.预编译的二进制文件可以 ...
随机推荐
- java web学习总结(十六) -------------------数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- Play modules
A Play application can be assembled from several application modules. This allows you to reuse appli ...
- ABP 初探 之 多语言
最近几天空闲时间比较多,就研究Abp的多语言,Abp是基于接口的依赖注入,有很多思想与方法都很好,需自己深入体会与应用,转化成自己的思想应用于实践. 本篇介绍基于 开源Demo ModuleZeroS ...
- jQuery网站顶部定时折叠广告
效果体验:http://hovertree.com/texiao/jquery/4.htm HTML文件代码: <!DOCTYPE html> <html xmlns="h ...
- 如何使用grunt压缩js文件
jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过 ...
- Bootstrap之字体图标
优点:1.减少请求 2.容易控制样式 所在位置:在下载的bootstrap文件中的fonts文件夹存放字体图标 默认路径为当前目录下,如需修改路径,则需在bootstrap.css中查找font-fa ...
- mysql时间加减函数
先来看一个例子: select now(),now()+0; 可以看到now()函数可以返回一个时间也可以返回一个数字,就看大家如何使用.如果相对当前时间进行增加或减少,并不能直接加上或减去一个数字而 ...
- iOS UIScrollView的使用
一.为什么要用UIScrollView? 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIVie ...
- 未能加载包“Microsoft SQL Server Data Tools”
直接在vs2013里的App_Data目录创建数据库,在服务器资源管理器中查看时报错: 未能加载包“Microsoft SQL Server Data Tools” 英文: The 'Microsof ...
- YourSQLDba版本升级总结
在使用YourSQLDba做数据库备份.维护时,像其它软件一样,版本升级是不可避免的.因为YourSQLDba一直在不停更新版本.扩展功能.下面介绍一下升级YourSQLDba时的具体步骤和一些注意事 ...