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的输入,最终的效果就是统计当前目录下的文件个数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端进阶之路

JS学习系列 05 - 执行上下文

在我们前面理解了作用域之后,“作用域链”这个概念就产生了。那么作用域链是什么意思,它又是怎么形成的,跟哪些概念有关系,这就是我接下来几章想和大家探讨的内容:执行...

13730
来自专栏魂祭心

原 yield用法分析

37970
来自专栏程序员的SOD蜜

实例探究字符编码:unicode,utf-8,default,gb2312 的区别

 最近做邮件收发,不同的邮件系统间可能会出现编码问题,迫使我重新回来研究一下字符的编码问题,unicode,utf-8,gb2312这些编码格式都是我们熟知的,...

258100
来自专栏后端技术探索

实用篇-无处不在的Location

location配置是nginx模块化配置中最出色的一个设计,几乎所有nginx的业务场景都要通过书写多个location配置来顺应业务需要。语法配置和执行规则...

12520
来自专栏python3

python列表

"C:Program Files (x86)python3.6python.exe" D:/python3_study/list1.py

12830
来自专栏微信公众号:Java团长

理解Java虚拟机体系结构

  众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下...

14760
来自专栏Java学习网

Java类加载机制的七个阶段,加载、验证、准备、解析、初始化、使用、卸载

当我们的Java代码编译完成后,会生成对应的 class 文件。接着我们运行java Demo命令的时候,我们其实是启动了JVM 虚拟机执行 class 字节码...

1.3K30
来自专栏JetpropelledSnake

Python面试题之Python反射机制

 我们要导入另外一个模块,可以使用import.现在有这样的需求,我动态输入一个模块名,可以随时访问到导入模块中的方法或者变量,怎么做呢?

39220
来自专栏自动化测试实战

接口测试基础——第7篇 简单的Python知识普及

32830
来自专栏java一日一条

Java虚拟机体系结构,你知道吗?

众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操...

8820

扫码关注云+社区

领取腾讯云代金券