// 函数 输入输出重定向 1、函数 function hello(){ echo '1111' } ------- hello hello(){ // function 可以省略 echo '2222' } hello ------- hello(){ return 11 } hello echo $? // 获取函数返回的值 ------- function hello(){ echo $1 echo $2 echo $3 echo "第十个参数${10}" echo "参数个数${#}" echo "输出所有参数${*}" echo "输出所有参数${@}" } hello 1 2 3 4 5 ------- 2、输入输出重定向 > >> < 输入重定向 << cat < ./1.txt // 把1.txt的内容截取出来 标准输入文件(stdin) 0 标准输出文件(stdout) 1 标准错误文件(stderr) 2 重定向解释: 2>&1 // 标准错误输出重定向到标准输出 /dev/null // 空设备 相当于一个黑洞 吞噬一切信息 // 标准输出 echo 123 > ./1.txt 等同于 echo 123 1> ./1.txt // 标准错误输出 echo 123 2> ./1.txt 把标准错误输出重定向到1.txt ./2.sh hello // hello 会报错 走标准错误输出 date ./2.sh > 1.txt // 会看到报错直接在终端上显示,未输出到1.txt,因为这里是标准输出,没有写标准错误输出重定向到1.txt ./2.sh 1> 1.txt 2> ./1.txt 这样就把标准错误输出到了1.txt 但是有个问题,这个写法相当于,打开了两次1.txt, 标准输出被标准错误输出给覆盖了 ./2.sh 1> 1.txt 2>&1 // >& 相当于对后面1即标准输出的引用,然后这句话的意思是标准输出重定向到1.txt,标准错误输出也重定向到1.txt,因此 ./1.txt里会显示 ./2.sh:行1: t: 未找到命令 2019年 03月 30日 星期六 15:29:38 CST ./2.sh 1> 1.txt 2>/dev/null // 这里标准输出重定向到1.txt, 标准错误输出重定向到空设备,即不输出错误信息,这时./1.txt里会显示 2019年 03月 30日 星期六 15:40:58 CST 3、文件引用 source ./xx.sh 或者 . ./1.sh