不积跬步,无以至千里
每天进步一点点
# 注释
1.表示注释
2.参数替换 echo ${PATH#*:}
3.数制转换 echo $((2#101011)) 将二进制101011转换成10进制
;分隔
1.命令分隔,在一行中写多个命令,echo "aa";echo "cc"
2.在条件中的if和then如果放在同一行,也用;分隔
;;case 条件的结束
. 命令相录于 source
#!/bin/bash
. data-file #加载当前目录下的data-file文件
#相当于"source data-file“ ,但是.的可移植性更强 相当于 include data-file的作用
,多个命令都被执行,但返回最后一个
let="t2=((a=9,15/3))" #set "a=9" and "t2=15/3",最后输出t2=5,a=9
"",'' 双引号和单引号,双引号可以解析变量,单引号则不行
: 操作符
空操作,什么都不做
死循环 while :
while :
do
....
done
#等价于
while true
do
.....
done
在if/then中表示什么都不做,引出分支
if condition
then : #什么都不做
else
....
fi
设置默认参数 :${username=`whoami`}
: ${username=`whoami`}
# ${username=`whoami`} 如果没有开头的:的话,将会给出一个错误,除非username是一个内部命令或内建命令
:> data.xxx #文件“data.xxx"现在被清空了,与cat /dev/null > data.xxx 相同,但是 :>不会产生一个新换进程
$* 所有参数
$#参数个数
$$ 进程的ID
$?进程的返回状态
()字符:命令组,在一个子shell中运行(a=3;echo $a)其中定义的变量在后面不可用
eg:
a=123
( a=123; )
echo "a= $a" #a=123 在圆括号中a变量,更像是一个局部变量
在括号中的变量,由于是在子 shell中,所以对于脚本剩下的部分是不可用的,父进程也就是脚本本身,将不能读取在子进程中创建的变量,也就是在子shell中创建的变量
()还有一个作用,数组的初始化
array=(a,b,c)