1.2终端打印
在默认情况下,echo在每次调用后会添加一个换行符。
如果你想打印 ! ,那就不要将其放入双引号中,或者加上转义字符。
echo Hello World !或 echo 'Hello World !'
或 echo "Hello world \!"
每种方法的副作用如下:
使用不带引号的echo时,没法显示分号(;),因为分号(;)在bash中被用作命令定界符。如:echo hello;hello
这被视为两个命令。
使用带单引号的echo时,Bash不会对单引号中的变量(如$var)求值,而只是照原样显示。如:echo '$var' 返回$var.
当在echo中使用带双引号的文本时,在echo之前使用set +H,可正常显示!。
(1)echo -e:处理特殊字符。
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
$echo -e "a\bdddd"
dddd
$echo -e "a\adddd" //输出同时会发出报警声音
adddd
$echo -e "a\ndddd" //自动换行
a
dddd
(2)echo -n:不换行输出。
1.3变量和环境变量
export命令用来设置环境变量。
如果需要在PATH中添加一条新路径,可以使用:export PATH=" $PATH:/home/user/bin"或PATH="$PATH:/home/user/bin" export PATH
获得字符串的长度:length=${#var}
root 用户的UID是0.
1.4 通过shell进行数学运算
利用let、(())和[]执行基本的算术操作。
let no++
result=
[no1+no2]result=
((no1+no2))
1.5文件描述符合重定向
文件描述符:
0——stdin
1——stdout
2——stderr
echo "this is a text" > tmp.txt
#覆盖tmp.txt文件
echo "this is a text">> tmp.txt
#追加到tmp.txt文件中
如果想使用特定的文件描述符,你必须将描述符置于操作符之前(>等同于1>)。
当一个命令发生错误并退回时,他会返回一个非0的推出状态,可以通过echo $?
命令进行查看。
/dev/null 是一个特殊的设备文件,null设备通常也被称为位桶。
cat <<FOF>> log.txt 与下一个EOF行之间的所有文本都会被当做stdin数据,重定向到log.txt
。
可以使用 exec 命令创建自定义的文件描述符。
1.6数组
普通数组只能使用整数作为数组索引,而关联数组可以使用字符串作为数组索引。
定义数组:arry=(1 2 3 4)或arry[0]="test"
echo ${arry[0]}
echo ${arry[*]} #打印数组中所有值
echo ${#arry[*]} #打印数组的长度
关联数组
declare -A ass_array #声明ass_array为关联数组
声明之后,将元素添加到关联数组中:
ass_arrray=([index1]=val1 [index2]=var2)或ass_array[index1]=val1 ass_array[index2]=val2
echo ${!array_var[*]}或 echo ${!array_var[@]} #列出数组索引.
1.7别名
alias new_command=’command sequence’
alias命令的作用只是暂时的。一旦关闭当前终端,所有设置过的别名就失效了。为了使之一直保持作用,可以将它放入~/.bashrc文件中。
1.9日期
date -s "21 June 2016 11:23:22" #设置日期和时间
1.10调试
把shebang从#!bin/bash改成#!/bin/bash -xv,不用任何其他选项就可以启用调试功能了
1.12读取命令序列输出
cmd_output=$(ls | cat -n) echo $cmd_output
反引号也可以存储命令输出
cmd_output=`ls | cat -n` echo $cmd_output
1.13read
read -s var #以不用回显的方式读取var
read -t 2 var #两秒种内将键入的字符串读入变量var
1.14IFS(internal field separator)
#读取data中的每一个条目
data ="name,sex,rollno,location"
oldIFS=$IFS
IFS=, #IFS设置为逗号
for item in $data
do
echo Item:$item
done
IFS=$oldIFS
1.15比较
[ $var -eq 0 ] #等于0返回真
-gt:大于
-lt:小于
-ge:大于或等于
-le:小于或等于
文件系统测试
[ -f $var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
[ -x $var ]:如果给定的变量包含的文件可执行,则返回真
[ -d $var ]:如果给定的变量包含的是目录,返回真
[ -e $var ]:如果给定的变量包含的文件存在,返回真
[ -w $var ]:如果给定的变量包含的文件可写```
[[ $str1 == $str2 ]] #字符串比较,相等返回真。
[[ -z $str1 ]] #str1包含的是空字符串,返回真
[[ -n $str2 ]] #str2非空,返回真。