一个程序的基本结构图:
如果我们要把标准输出和错误输出都写入到一个文件里,例如:ls /abc / 1>file.txt 2>1,abc这个路径是不存在的,代表错误输出,结果file.txt文件里只有标准输出,因为标准输出把错误输出给覆盖了。
所以,就要用到&把他们连接起来,ls /abc / 1>file.txt 2>&1,这样,标准输出和错误输出都在file.txt文件里了
输入的标志:< 输出的标志:>
输出重定向:>:ls /tmp 1>aaa 把标准输出覆盖aaa文件中的内容
>>:ls /tmp 1>>aaa 把标准输出追加到aaa文件中
输入重定向:<:
<<:read aaa<<AABB,执行该命令后,就会进入编辑模式,用来给变量aaa赋值,当写入AABB时停止赋值;
<<<:read aa<<<"xxxx"---------->这个命令代表把"xxx"赋值给本地变量aa
变量:本地:name=god
局部:local---只能用于函数
环境:export
特殊:$#:位置参数个数
$*:参数列表,双引号引用为一个字符串
$@:参数列表,双引号引用为单独的字符串
$$:当前shell的PID:接收者
$BASHPID:真实
$?:上一个命令退出状态 0:成功 other:失败
位置:$n 向脚本中传递参数,$1代表第一个参数
当我们编写一个输出功能的脚本时,我们可以选择参数的输出位置,例如:echo $2 echo $12...,但是$12只能显示第1个参数加2,所以,我们就需要通过{}来限制命令的界限:echo ${12}
算术表达式:
let 算术运算表达式
let C=$A+$B
$[算术表达式]
C =$[$A+$B]
$((算术表达式))
C=$(($A+$B))
条件表达式:
[ expression ]
test expression
[[ expression ]]
流程控制:if、for、while、case
for:①for i in 1 2 3 4 5
do
echo $i
done
②for i in `seq 100`----->相当于1~100的队列
do
echo $i
done
③for((i=1;i<=9;i++))
do
echo $i
done
④for((i=1;i<=9;i++))---->用for的嵌套循环实现99乘法表
do
for((j=1;j<=i;j++))
do
echo -n "$i*$j=$[i*j] "
done
echo " "
done
if:if [ 2 -gt 2 ]
then
echo "ok"
elif [ 3 -lt 2 ]
then
echo "error"
else
echo "hello world"
fi
case: case $num in
1) echo '你选择了1' ;;
2) echo '你选择了2' ;;
3) echo '你选择了3' ;;
4) echo '你选择了4' ;;
*) echo "输入有误" ;;
esac
while:①while :---->死循环
do
echo " "
done
②while [ $flag -gt 0 ]
do
echo " "
done
运行shell脚本的三种方式:
source 脚本名
bash 脚本名
./脚本名
生成start,end范围内的随机数:
echo $((RANDOM % ($end - $start) + $start))
用hello Linux 覆盖file.txt文件中的内容-----》echo "hello Linux">file.txt
进程树--->pstree 目录树--->tree