运算

let操作

  • 可以直接执行基本的算术操作;使用时,变量名之前不需要再添加$;
#!/bin/bash
no1=4;
no2=5; let result=no1+no2
echo $result
  • 自增自减操作:
let no1++ / ++no1;
let no1-- / --no1;
// let no+=6
let no-=6

[]操作

  • 使用方法和let命令类似;
#!/bin/bash
no1=4;
no2=5; result=$[no1+no2]
echo $result
  • []中也可以使用$前缀;效果与不使用相同;
  • 也可以使用(()),但使用(())时,变量名之前需要加上$;
result=$(( no1 + 50 ))

使用expr操作

result=`expr 3 + 4`
result=$(expr $no1 + 5)

注意,以上这些方法只能用于整数运算,而不支持浮点数;

使用bc

  • 一个用于数学运算的高级工具,可以借助它执行浮点数运算并应用一些高级函数;
  • 可能需要安装:apt-get install bc
echo "4 * 0.56" | bc
2.24 //
no=54;
result=`echo "$no * 1.5" | bc`
echo $result
81.0
  • 设定小数精度
echo "scale=2;3/8" | bc
0.37
  • 进制转换
#!/bin/bash
#十进制转二进展然后二进行转十进制;
 
no=100
echo "obase=2;$no" | bc
1100100
no=1100100
echo "obase=10;ibase=2;$no" | bc
100
  • 计算平方以及平方根
echo "sqrt(100)" | bc #Square root
echo "10^10" | bc #Square

数组和关联数组

定义一般数组

#这些值将会存储在以0为起始索引的连续位置上
array_var=(1 2 3 4 5 6) #将数组定义成一组“索引-值”:
array_var[0]="test1"
array_var[1]="test2"
array_var[2]="test3"

定义关联数组

  • 可以用任意的文本作为数组索引;
//声明
declare -A ass_array
//添加
ass_array=([index1]=val1 [index2]=val2)
ass_array[index1]=val1
ass_array[index2]=val2

打印数组

  • 打印值
echo ${array_var[0]}

//
index=5
echo ${array_var[$index]} //打印所有值
echo ${array_var[*]}
echo ${array_var[@]}
  • 打印长度
echo ${#array_var[*]}
echo ${#array_var[@]}
  • 打印索引
echo ${!array_var[*]}
echo ${!fruits_value[*]}

cat进行拼接

常用作用

  • 用于读取、显示或拼接文件内容
cat file1 file2 file3 ...

//使用管道操作符: OUTPUT_FROM_SOME COMMANDS | cat
echo 'Text through stdin' | cat - file1 file2..
  • 输出时增加行号:
//保留空白输出输出
cat -n file //过滤空白行输出
cat -b file
  • 过滤多余空白行: cat -s file;
  • 将制表符显示为^|
    • 制表符(TAB)的功能是在不使用表格的情况下在垂直方向按列对齐文本;
    • 对于缩进有要求的语言若在应该使用空格的地方误用了制表符的话,就会产生缩进错误;
    • 该特性对排除缩进错误非常有用;

文件描述符及重定向

文件描述符

  • 与文件输入、输出相关联的整数;用来跟踪已打开的文件;
stdin: 0,stdout: 1,stderr: 2`

处理输出文本

  • > = 1>; >> = 1>>
//将输出文本重定向或保存到一个文件中
echo "This is a sample text 1" > temp.txt //将文本追加到目标文件中
echo "This is sample text 2" >> temp.txt

输出结果重定向

  • echo $?;可以打印退出的状态;
ls 1> out.txt
ls + 2> out.txt
  • 链式: cmd 2>stderr.txt 1>stdout.txt

  • 重定向到同一个文件

//将stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中:
cmd 2>&1 output.txt
cmd &> output.txt

过滤输出的stderr信息;

  • 处理错误时,可以将stderr的输出重定向到/dev/null;它是一个特殊的设备文件,接收到的任何数据都会被丢弃;

使用tee:

  • 既可以将数据重定向到文件,还可以提供一份重定向数据的副本作为后续命令的stdin
cat a* | tee out.txt | cat -n
  • 追加
cat a* | tee -a out.txt | cat -n

使用stdin作为命令参数

//只需要将-作为命令的文件名参数即可
cmd1 | cmd2 | cmd -

shell-bash学习02运算、拼接、重定向的更多相关文章

  1. Shell脚本学习 - 函数,输入输出重定向,文件

    函数 函数定义 [ function ] funname [()] { action; [return int;] } 定义时可以是function fun(),也可以直接fun(),不带参数 返回值 ...

  2. 【Shell脚本学习指南笔记】重定向文件描述符 2>&1

    如: make > results 2>&1 重定向 > results让文件描述符1(标准输出)作为文件results,接下来的重定向2>&1有两个部分.2& ...

  3. [Shell]Bash基本功能:输入输出重定向

    /*----------------------------------------------------------------------------------------------- @黑 ...

  4. Linux之bash shell的学习

    1.什么是bash  shell bash 是Bourne Again Shell的简称,是从unix系统中的sh发展而来,是用户和偶Linux内核交互的工具,用户通过bash操作内核完成系统的使用和 ...

  5. Shell编程学习之重定向

    这一篇讲一下重定向 有些时候你想要保存某些命令产生的输出而不是在显示器上显示它. 为了应对这样的问题 bash shell 也就提供了一些重定向的操作符. 我们先了解一些基本的应用. 输出重定向 输出 ...

  6. shell语法学习

    [原文] 菜鸟笔记shell教程学习. 本篇博客只是记录shell的一些关键语法,主要是做一个记录,有些内容也是copy过来的,并不是一个完整的教程,想完整学习shell的同学可以前往 shell脚本 ...

  7. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  8. Shell脚本学习指南笔记

    Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...

  9. linux shell & bash

    shell & bash shell指允许用户通过文本操作计算机的程序. interactive shell:从是否通过标准输入输出与用户进行交互的角度分为交互式shell(interacti ...

随机推荐

  1. 【leetcode】House Robber & House Robber II(middle)

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  2. Linux系统安装时分区的选择(推荐)

    Linux系统安装时分区的选择(推荐)  出处:http://www.cnblogs.com/gylei/archive/2011/12/04/2275987.html 前言: 以前初识Linux时, ...

  3. [网络流24题]餐巾(cogs 461)

    [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...

  4. PostgreSQL中COUNT的各条件下(1亿条数据)例子

    test=# insert into tbl_time1 select generate_series(1,100000000),clock_timestamp(),now(); INSERT 0 1 ...

  5. PHP之MVC学习

    代码架构进货过程 one,混编 嵌入式脚本语言PHP html与php混编的编码方式 two,显示和逻辑相分离 最后,需要将显示和逻辑的结果放在一起! 需要在 php页面,将html代码 载入才可以! ...

  6. 三、jQuery--jQuery基础--jQuery基础课程--第1章 初识jQuery

    环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库 ...

  7. 【JAVA常用类演示】

     一.java.lang.System类. public final class Systemextends Object 该类包含一些有用的类字段和方法.它不能被实例化. 在 System 类提供的 ...

  8. python中的monkey-patching

    这个技巧我很少用过. 但知道无防. 在运行时改变函数或类的行为, 一般用猴子补丁,原类,装饰器都可以实现. #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  9. SQLAlchemy增删改查基本操作,及SQL基本技能样码(join,group)

    练了一天,基本的东东应该有感觉了. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Tabl ...

  10. PHP+Nginx环境搭配

    一.Nginx安装 nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. u ...