说明:

本文是关于http://c.biancheng.net/cpp/shell/的相关笔记

shell字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

 1 #!/bin/bash
 2
 3 ##字符串
 4
 5 #不加引号:
 6 #无法出现;
 7 echo a
 8 echo a;b
 9
10 #单引号:
11 #单引号里的任何字符都会原样输出,单引号字符串中的变量替换是无效的;
12 #单引号字符串中不能出现单引号(对单引号使用转义符后也不行)。
13 str='this is a string'
14 echo ${str}
15 str_1='$str'
16 echo ${str_1}
17 #str_2='\'a'
18 #echo str_2
19
20 #双引号:
21 #双引号里可以有变量替换;
22 #双引号里可以出现转义字符。
23 your_name='wuyifan'
24 str="Hello, I know that you are \"$your_name\"!"
25 echo ${str}
26
27 #拼接字符串
28 greeting="hello,"$your_name"!"
29 greeting_1="hello,${your_name}!"
30 echo $greeting"/"$greeting_1
31
32 #获取字符串长度
33 string="abcd"
34 echo ${#string}
35
36 #提取子字符串
37 string="alibaba is a great company"
38 echo ${string:1:4}
39
40 #查找子字符串:
41 #索引
42 #expr index $string $substring
43 #在字符串$string中所匹配到的$substring的第1个字符第一次所出现的位置。
44 echo `expr index "$string" is`
45 echo `expr index "$string" at`

字符串

shell数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

类似于C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

 1 #!/bin/bash
 2
 3 ##定义数组
 4
 5 #()中以空格或者换行符分隔
 6 names=("ljq" "ymq" "lc")
 7 names_1=(
 8 "ljq"
 9 "ymq"
10 "lc"
11 )
12 #还可以单独定义数组的各个分量
13 names_2[0]="ljq"
14 names_2[1]="ymq"
15 names_2[2]="lc"
16 #可以不使用连续的下标,而且下标的范围没有限制
17
18 ##读取数组
19 echo "first name: ${names[0]}"
20 echo "second name: ${names[1]}"
21 echo "third name: ${names[2]}"
22 #使用@或*可以获取数组中的所有元素
23 echo ${names_1[*]}
24 echo ${names_2[@]}
25
26 ##获取数组的长度:与获取字符串的长度相同
27 #获取数组元素的个数
28 echo ${#names[*]}
29 echo ${#names[@]}
30 #获取数组单个元素的长度
31 echo ${#names[2]}

数组

echo命令与printf命令

echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串。

printf命令用于格式化输出, 是echo命令的增强版。它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同。
注:

printf 不像 echo 那样会自动换行,必须显式添加换行符(\n)。
printf 命令的语法:
printf  format-string  [arguments...]
format-string 为格式控制字符串,arguments 为参数列表。

这里仅说明与C语言printf()函数的不同:
printf命令不用加括号。
format-string可以没有引号,但最好加上,单引号双引号均可。
参数多于格式控制符(%)时,format-string可以重用,可以将所有参数都转换。
arguments使用空格分隔,不用逗号。

 1 #!/bin/bash
 2
 3 #format-string为双引号
 4 printf "%d %s\n" 1 "abc"
 5
 6 #单引号与双引号效果一样
 7 printf '%d %s\n' 1 "abc"
 8
 9 #没有引号也可以输出
10 printf %s abcdef
11 echo
12
13 #格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string被重用
14 printf %s abc def
15 echo
16 printf "%s\n" abc def
17 printf "%s %s %s\n" a b c d e f g h i j
18
19 #如果没有arguments,那么%s用NULL代替,%d用0代替
20 printf "%s and %d \n"
21
22 #如果以%d的格式来显示字符串,那么会有警告,提示无效的数字,此时默认置为0
23 printf "The first program always prints'%s,%d\n'" Hello Shell

echo与printf

shell入门笔记2:字符串、数组、echo与printf的更多相关文章

  1. shell入门笔记1:执行方式、运行方式、变量、替换

    说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell的两种执行方式 交互式(interactive) 解释执行用户的命令,用户输入一条命令,She ...

  2. Shell 入门笔记(一)

    Shell简介 在开发过程中Linux系统经常接触和使用的,Shell 是我们用户使用 Linux 的桥梁,是C 语言编写的程序.Shell 是一种命令语言,同时一种程序设计语言.对大多数开发人员来说 ...

  3. Shell - 简明Shell入门07 - 数组(Array)

    示例脚本及注释 #!/bin/bash test0=() # 定义数组 test1=(a b c d e f) # 定义数组 test2=( # 定义数组 'A?' "BB!" C ...

  4. Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式

    一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...

  5. shell echo/read/printf/流程控制章节笔记

    // echo read printf 流程控制 命令 1.read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 read hello 输入xxx echo $hell ...

  6. shell 变量、参数、数组章节笔记

    // 变量名和等号之间不能有空格 hello="123456"; echo $hello; // 花括号只是帮助识别变量边界 echo ${hello}; // unset 删除变 ...

  7. Shell - 简明Shell入门03 - 字符串(String)

    示例脚本及注释 #!/bin/bash str="Shell" str2="Hello $str !" str3="Hello ${str} !&qu ...

  8. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  9. MySQL入门笔记

    MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: ·          rpm包形式 ·          通用二进制 ...

随机推荐

  1. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  2. C语言程序设计(基础)- 第14、15周作业

    从本周开始,将作业标记为学校自然周,而不是开课的周数. 要求一(25经验值) 完成14.15周的所有PTA中题目集. 注意1:一周两次pta作业,包括四次. 要求二(50经验值) 博客的具体书写内容和 ...

  3. Alpha第五天

    Alpha第五天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  4. 设计模式NO.1

    设计模式NO.1 根据作业要求完成下列题目: 题目1: (1)要求:某系统日志记录器要求支持多种日志记录方式,如文件记录.数据库记录等:用户可以根据要求动态选择日志记录方式.使用Factory模式来设 ...

  5. 20145237 实验二 “Java面向对象程序设计”

    20145237 实验二 “Java面向对象程序设计” 实验内容 • 理解并掌握面向对象三要素:封装.继承.多态 • 初步掌握UML建模 • 熟悉S.O.L.I.D原则 • 使用TDD设计实现复数类 ...

  6. 从PRISM开始学WPF(三)Prism-Region?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  7. Vim 中文社区:期待你的加入

    我们的愿景 Vim 中文社区一直比较零散,缺少凝聚力,现有的一些群经常也是水的可以的,讨论各种无关紧要的内容,于是导致很大一部分人,将这些群丢入了群助手,渐渐地他们也淡出了 vim 中文社区. 而我理 ...

  8. Angular.js 1++快速上手

    AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Goole所收购.是一款优秀的前端JS框架.AngularJS有着诸多特性,最为核心的是:MVC,撗块化,自动化双向数据绑 ...

  9. thinkphp中的常见静态常亮

    thinkphp __PUBLIC__的定义 __ROOT__等常量的定义 1 2 3 4 5 6 7 8 9 '__TMPL__'      =>  APP_TMPL_PATH,  // 项目 ...

  10. C语言学习(一)

    C语言易学难精,如果在平时的编程中,加入一些小技巧,可以提供程序运行的效率,何乐而不为呢? 本小白初学C语言准备记录自己的学C之路,经常贴一些自己觉得优化的小程序代码,希望大神们不吝 赐教. 宏定义下 ...