1. 终端打印 命令 echo
echo "字符串"
str="hello word"
echo $str 或者 echo ${str}
str="hello world!" 执行报错 -bash: !": event not found
对于有"!"符号的输出,可以在echo之前,执行 set +H 命令,然后再echo输出.
2.终端打印命令 printf
printf "%-5s %-10s %-4.2f\n" 1 james 90.5789
%s, %c, %d, %f都是格式替代符号.
对于echo或printf中的标志(-e, -n等);
转义换行符
echo -e "1\t2\t3"
打印色彩输出
echo -e "\e[1;31m this is red text \e[0m"
3.环境变量
$PATH, $HOME, $PWD, $USER, $UID, $SHELL等.
4.获得字符串长度
echo ${#变量名}
例如: s="test"
echo ${#s} 返回结果:4
5.识别当前shell版本
echo $0 或者 echo $SHELL
6.算术运算
在Bash shell环境中,可以利用let, (( ))和[ ]执行基本的算数操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.
let n=1+5
echo $n
let n++
let n--
let n+=6
n=$[ 1+5 ]
n=$(( 1+5 ))
n=`expr 3 + 4`
以上不支持浮点数,只用于整数运算.
bc是一个用于数据运算的高级工具,可以借助它执行浮点数运算.
echo "4 * 0.56" | bc
no=58
result=`echo "$no * 1.5" | bc`
echo $result
(1).设定小数精度(参数scale=2将小数位个数设置为2)
echo "scale=2;3/8" | bc
(2).进制转换(参数obase=2,表示几进制,2表示二进制)
no=100
echo "obase=2,$no" | bc
(3).计算平方以及平方根
echo "sqrt(100)" | bc
echo "10^3" | bc
7.文件描述符和重定向
文件描述符是与文件输入,输出相关联的整数,用来跟踪已打开的文件,最常见的文件描述符
0 --- 标准输入(stdin)
1 --- 标准输出(stdout)
2 --- 标准错误(stderr)
(1)用下面的方法可以将输出文件重定向或保存到一个文件中
echo "this is a sample text 1" > temp.txt
echo "this is a samle text 2" >> temp.txt
>和>>不相同, >表示先清空再写入内容; >>表示将内容追加到现有文件的尾部.
重定向操作符操作默认使用标准输出, >等同于1>; >>等同于1>>;
ls + 该命令会报错
ls + 2> out.txt
cmd 2>stderr.txt 1>stdout.txt
cmd &> output.txt
如果你不想让终端中的出错信息,可以将这些错误信息重定向到/dev/null.
这样意味着来自stderr的输出被丢到文件/dev/null中, /dev/null是一个特殊的设备文件,这个文件被接收到任何数据都会被丢弃,因此,null设备通常也被称为位桶或黑洞.
要在终端中打印stdout,同时将它重定向到一个文件中,可以使用tee:
command | tee file1 file2
例如:
echo "test" > atest.txt
cat atest.txt | tee out.txt | cat -n
以上命令表示打印文件atest.txt内容的同时,将该文件的内容的副本存入文件out.txt.
我们可以使用stdin作为命令参数.
cmd1 | cmd2 | cmd3
例如:
echo who is this | tee -
类似的, 使用/dev/stderr代表标准错误, dev/stdout代表标准输出.
将文件重定向到命令 $cmd < file, 可以借助于重定向,像使用stdin那样从文件读取数据.
exec 3< out.txt
cat <&3
exec 5>input.txt
echo newline >&5
cat input.txt
exec 5>>input.txt
echo append line >&5
cat input.txt
8.数组
array_var=(1 2 3 4 5 6) --用空格分隔
另外还可以这样初始化数组, array_var[0]="test1"
打印特定索引的数组元素 echo ${array_var[0]}
如index=5
echo ${array_var[$index]}
以清单形式打印数组中的所有值: echo ${array_var[*]} 或者 echo ${array_var[@]}
打印数组长度: echo ${#array_var[*]} 或者 echo ${#array_var[@]}
9.关联数组
关联数组从Bash4.0开始引入,在关联数组中,我们可以用任意的文本作为数组索引,而普通数组中只能用整数做为索引.
声明关联数组 declare -A ass_array
ass_array=([index1]=val1 [index2]=val2)
declare -A fruits_value
fruits_value=([apple]='100 dollars' [orange]='150 dollars')
echo "apple costs ${fruits_value[apple]}"
apple costs 100 dollars
echo ${!fruits_value[*]}
orange apple
echo ${fruits_value[*]}
150 dollars 100 dollars
10.别名
alias new_command='command sequence'
alias t='ll'
alias命令的作用只是暂时的,一旦关闭当前终端,所有设置过的别名就失效了.为了使别名设置一直保持作用,可以将它放入~/.bashrc文件中.因为每当一个新的shell进程生成时,都会执行~/.bashrc 中的命令.
echo 'alias cmd="command seq"' >> ~/.bashrc
我们可以创建一个别名rm,它能够删除原始文件,同时在backup目录中保留副本.
alias rm='cp $@ ~/backup; rm $@'
11.获取终端信息
tput和stty是两款终端处理工具.
获取终端的行数和列数:
tput cols
tput lines
打印出当前终端名:
tput logname
将光标移动到方位(100,100)处:
tput cup 100 100
删除当前光标位置到行尾的所有内容:
tput ed
保存当前光标位置,要保存当前的光标位置,请包括 sc
选项或“save cursor position”。:
tput sc
在显示了这些信息之后,光标必须返回到使用 tput sc
保存的原始位置。要使光标返回到其上次保存的位置,请包括rc
选项或“restore cursor position”。
tput rc
用tput清除终端数据:
要清除从当前光标位置到行尾的数据,可以使用tput el
。要清除从当前光标位置到设备末尾的数据,可以使用tput ed
。如果您想要清除整个设备,请使用tput clear
。