### linux下文件权限说明:
![](https://img.kancloud.cn/67/c5/67c55f0534fc42a46fb64d10cf3f903a_541x95.png)
标志共10位,第一位是文件标志,- 表示普通文件,d 表示目录,l 表示软链接。
后9位是权限标志,这部分的
前3位表示文件/目录**所有者**(创建者)拥有的权限;
中间3位表示文件/目录**所有组**(创建者所在组中的其他用户拥有的权限)拥有的权限;
最后3位表示其他用户(既不是创建者,也不是创建组中的用户)拥有的权限。
r:可读
w:可写
x:可执行
*****
chmod +x ,所有的用户都可以获得执行权,chmod o-x 去掉其他用户的执行权(o 即other)
*****
shell 脚本的第一行 #!/bin/bash ,表示告诉系统用这个解释器执行,当用 bash a.sh 执行时,那行就是个注释,当用 ./a.sh 执行时,那行就生效了。
*****
### 自定义变量
echo $USER $PWD $HOME $SHELL 系统内置变量。
变量定义时,i=0,不可以写成 i = 0,i 会被当成命令, = 当成第一个参数, 0 被当成第二个参数。
unset i,撤销变量。
readonly i = 5,定义静态变量,不可修改,无法用unset。
### 特殊变量
**$n**(n为数字,$0表示脚本名称,$1-$9表示第1到9个参数,第十个以上的参数用花括号,如${10})
![](https://img.kancloud.cn/b2/f1/b2f1dec98452f7f1637a80d8012a084a_103x56.png)
![](https://img.kancloud.cn/04/62/0462c50971dfb0b95e13b49e415c991d_299x29.png)
**$#**(获取输入参数的个数)
![](https://img.kancloud.cn/b2/f1/b2f1dec98452f7f1637a80d8012a084a_103x56.png)
![](https://img.kancloud.cn/b8/eb/b8eb01b74556eb3a015e26c260ed1109_367x47.png)
**$*** **$@** ,打印出参数整体,区别在于,$* 将参数作为整体,$@将参数分开对待。
![](https://img.kancloud.cn/05/25/0525fb6e22bd7aa0541d558cc9fd41b4_99x78.png)
![](https://img.kancloud.cn/aa/08/aa080bb4abecf99766aae4f05dd84fed_329x76.png)
**$?**,返回上一个脚本的执行状态码,echo $?,正常执行完,返回0,否则返回1。
*****
### 运算符
a=5
b=5
echo $[$a+$b] 或者 echo $(($a+$b))
expr $a + $b,expr 是个命令,后面三个是参数,所以要空格
*****
### 条件判断
[ $a = $b ],注意空格。
字符串比较用 =,数值比较用 -eq , -lt , -le , -ge , -gt , -ne。
[ -x a.sh ],查看 a.sh 是否有执行权限,如果有,echo $? 返回0,否则返回1。-r , -w 同理。
[ -f a.sh ],查看a.sh文件是否存在,如果存在,echo $? 返回0,否则返回1。-d 查看是否存在目录是否存在,-e 查看任意文件或目录是否存在。
*****
```
#!/bin/bash
#!查看文件是否存在。
if [ -f text ]
then
cat text
else
touch text
#! >> 是追加, > 是覆盖
echo text >> text
fi
```