1、输出颜色

echo -e "\e[1;31m this is red \e[0m"
#重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37。
#彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47。

2、增加环境变量

export PATH="$PATH:/usr/bin/java"

3、输出重定向

标准输出重定向 command >file 以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。
标准错误输出重定向 command 2>file 以覆盖的方式,把 command 的错误信息输出到 file 文件中。
正确输出和错误信息同时保存 command >file 2>&1 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >>file 2>&1 以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >file1 2>file2 以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。

4、数组

定义数组:declare -A ass_array
索引-值:ass_array[index1]=val1
列出索引值 echo ${!array_var[*]} echo ${!array_var[@]}

5、别名

创建别名 alias new_command='command sequence'
对别名进行转义 command 字符可以转义命令,从而执行原本的命令

6、调试脚本

-x 参数 sh -x script
-v 参数 显示脚本内容  sh -xv script 调试脚本

7、函数

函数定义
function fname ()
{
statements;
}
执行函数 fname
函数传参: fname arg1 arg2

8、传递参数

echo $1 $2 $3
更为常见的处理方式是迭代所有的命令行参数。shift命令可以将参数依次向左移动一个位
置,让脚本能够使用$1来访问到每一个参数

$ cat showArgs.sh
for i in `seq 1 $#`
do
echo $i is $1
shift
done
$ sh showArgs.sh a b c
1 is a
2 is b
3 is c

9、持续运行命令直至执行成功

true 可以改成:true是作为/bin中的一个二进制文件来实现的。这就意味着每执行一次之前提到的while循环,shell就不得不生成一个进程。为了避免这种情况,可以使用shell的内建命令:,该命令的退出状态总是为0:

repeat()
{
while true  
do
$@ && return
done
}

repeat() { while :; do $@ && return; sleep 30; done }  #每30秒才会运行一次

10、字段分隔符与迭代器

可以按照下面的方法巧妙地利用IFS打印出用户以及他们默认的shell:
#!/bin/bash
#用途: 演示IFS的用法
line="root:x:0:0:root:/root:/bin/bash"
oldIFS=$IFS;
IFS=":"
count=0
for item in $line;
do
[ $count -eq 0 ] && user=$item;
[ $count -eq 6 ] && shell=$item;
let count++
done;
IFS=$oldIFS
echo $user's shell is $shell;
输出为:
root's shell is /bin/bash

IFS的默认值为空白字符(换行符、制表符或者空格)。

11、比较与测试
● -ne: 不等于
● -eq: 等于
● -gt:大于。
● -lt:小于。
● -ge:大于或等于。
● -le:小于或等
● [ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
● [ -x $var ]:如果给定的变量包含的文件可执行,则返回真。
● [ -d $var ]:如果给定的变量包含的是目录,则返回真。
● [ -e $var ]:如果给定的变量包含的文件存在,则返回真。
● [[ -z $str1 ]]:如果str1为空串,则返回真。
● [[ -n $str1 ]]:如果str1不为空串,则返回真。 n1=echo $n|sed 's/[0-9]//g' 常用于判断是不是数字

11、cut 按列切分文件
$ cut -f 2,3 filename
该命令将显示第2列和第3列。

$ cat student_data.txt
No Name Mark Percent
1 Sarath 45 90
2 Alex 49 98
3 Anu 45 90
$ cut -f1 student_data.txt
No
1
2
3
选项-d能够设置分隔符。下面的命令展示了如何使用cut处理由分号分隔的字段:
$ cat delimited_data.txt
No;Name;Mark;Percent
1;Sarath;45;90
2;Alex;49;98
3;Anu;45;90
$ cut -f2 -d";" delimited_data.txt
Name
Sarath
Alex
Anu

我们也可以用 --complement选项显示出没有被-f指定的那些字段。下面的命令会打印
出除第3列之外的所有列:

$ cut -f3 --complement student_data.txt
No Name Percent
1 Sarath 90
2 Alex 98
3 Anu 90
$ cat range_fields.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxy
你可以打印第2个到第5个字符:
$ cut -c2-5 range_fields.txt
bcde
bcde
bcde
bcde

标签: shell

添加新评论