echo

用于终端打印的最基本命令。默认情况下,echo在每次调用后都会添加一个换行符,echo打印的文本,一种是被双引号包括的文本,一种是被单引号包括的文本,还可以不适用双引号和单引号。区别是:使用双引号包括的文本中,如果文本中含有特殊字符,会被解释,而单引号中对特殊字符不做任何处理。对于转义字符,可以使用\来进行转义

[ld@localhost workspace]$ echo "hello world $0"
hello world bash
[ld@localhost workspace]$ echo 'hello world $0'
hello world $0
[ld@localhost workspace]$ echo hello world $0
hello world bash
[ld@localhost workspace]$ echo hello world \!
hello world !

printf 

printf接受饮用文本或由空格分隔的参数,可以使用格式控制符来对输出进行控制,和C语言的printf函数相似,%s %d %f都是格式控制符,定义了如何带引后续参数,%-4s指明格式为左对齐且宽度为4的字符串替换,没有-号为右对齐,对于s来说,宽度指明保留某个字符串的字符数量,不足以空格填充,对于浮点数,整数部分指明整个浮点数的宽度,小数部分指明保留几位小数。

[ld@localhost workspace]$ printf "%4s %4d %3.2f\n" liu 23 3.1445
 liu   23 3.14

变量赋值

 varName=value        注意: 等号的左右两边没有空格。varName是变量名,value是要赋予的值,如果value不包含任何空白字符,就不需要将其放入到引号中,否则必须使用单引号或双引号。

[ld@localhost workspace]$ name=ld
[ld@localhost workspace]$ name=ld d
bash: d: command not found...
[ld@localhost workspace]$ name="ld d"

变量的获取使用$varName 或者 ${varName}

[ld@localhost workspace]$ echo $name
ld d
[ld@localhost workspace]$ echo ${name}
ld d

 Shell内建特性:

获取字符串的长度,以及识别当前所使用的shell.

[ld@localhost workspace]$ echo ${#name}
4
[ld@localhost workspace]$ echo $SHELL
/bin/bash

 修改Bash的提示字符串

当我们打开终端或运行shell时,看到类型的ld#localhost path $提示字符串,不同的GNU/Linux发布版中的提示字符串和颜色各不相同,可以利用PS1环境变量来定义主提示字符串,默认的提示字符串在文件~/.bashrc中的某一行设置。

# User specific aliases and functions
PS1="FIGHTING..."
                  
FIGHTING... ls
app      Documents  hadoopHello.jar  Pictures  Templates  tetConfiguration.jar  WindowsTB
Desktop  Downloads  Music            Public    test.txt   Videos                workspace
FIGHTING...

shell进行数学运算

⑴使用let命令⑵使用操作符[]⑶使用操作符(())⑷使用expr

FIGHTING...num=5
FIGHTING...let num++
FIGHTING...echo $num
6
FIGHTING...num=$[ num + num ]
FIGHTING...echo $num
12
FIGHTING...num=$(( num + num ))
FIGHTING...echo $num
24
FIGHTING...num=`expr 6 + 6`
FIGHTING...echo $num
12

文件描述符与重定向

文件描述符是与输入和输出相关联的整数。文件描述符有标志输入,标准输出,标准错误,stdin,stdout,stderr.我们可以将文件描述符重定向到另一个文件描述符中。

默认情况下,正常输出和错误输出都会显示在屏幕上,文件描述符是与某个打开的文件或数据流相关联的整数。文件描述符0,1,2对应标准输入,标准输出,标注错误。

重定向:

使用>,将输出的文本保存在后面的文件中,如果后面文件已经存在,则大于号会清空该文件中先前的内容

使用>>,将输出的文本追加到后面的文件中。

使用<,使用stdin那样从文件中读取数据。

FIGHTING...cat test.txt
hello world 
===========
     -- name : liudong 
FIGHTING...echo ">>>>>" > test.txt
FIGHTING...cat test.txt
>>>>>
FIGHTING...echo "<<<<<>>>>>>" >> test.txt
FIGHTING...cat test.txt
>>>>>
<<<<<>>>>>>
FIGHTING...

注意:当命令成功执行后,它会返回为0的退出状态,退出状态可以从特殊变量$?中获得。当一个命令发生错误并退出时,它会返回一个非0的退出状态。

重定向和文件描述符结合:

使用2>xxx,会将stderr重定向到xxx文件中;

使用1>xxx,会将stdout重定向到xxx文件中;

FIGHTING...cmd 2>stderr.txt 1>stdout.txt
FIGHTING...cat stderr.txt
bash: cmd: command not found...
Similar command is: 'mcd'
FIGHTING...cat stdout.txt

 也可以使用管道实现重定向数据到文件,还可以提供一份重定向数据的副本作为管道中后续命令的stdin.

command | tee File1 File2 | othercommand

数组

FIGHTING...array=(1,2,4,5,6)
FIGHTING...echo $array
1,2,4,5,6
FIGHTING...echo ${array[0]}
1,2,4,5,6
FIGHTING...array2[1]=1
FIGHTING...array2[2]=2
FIGHTING...echo ${array2[0]}
FIGHTING...echo ${array2[1]}
1
FIGHTING...echo ${array2[*]}
1 2
FIGHTING...echo ${array2[@]}
1 2
FIGHTING...echo ${#array2[*]}
2
FIGHTING...

别名

alias new_command='command sequence'

alias命令的效果暂时的,一旦关闭当前终端,所有设置过的别名就失效了,为了使别名在所有的shell中都可用,可以将其放入~/.bashrc文件中,每当交互式shell进程生成时,都会执行~/.bashrc中的命令。

注意:创建一个和愿生命令同名的别名很容易,如果有人恶意修改别名为重要的命令,则可以转义要使用的命令,忽略当前定义的别名:\command

日期

Unix纪元时定义为从世界标准时间UTC(1970年1月1日0时0分0秒起至当前时刻的总秒数,不包括闰秒)

读取日期: date

打印纪元时: date %s

用带有前缀+的格式化字符串作为date命令的参数: date "+%d %B %Y"

函数

函数的定义包括function命令,函数名,开闭括号以及包含一对花括号中的函数体。

#!bin/bash

function test()
{
  echo "this is a function "
}

test

test2()
{
  echo "this is a function2"
}

test2

test3()
{
  echo $1,$2;
  echo "$@";
  echo "$*";
  return 0;
}

test3 zhang san li si
FIGHTING...bash std.sh
this is a function 
this is a function2
zhang,san
zhang san li si
zhang san li si
FIGHTING...

 

参考《Linux Shell 脚本攻略》