Shell脚本编程
脚本本质:
- /bin/bash
- /usr/bin/python
chmod赋权方式
当前文件必须为可执行文件, 绿色为可执行文件,白色为不可执行文件
由不可执行文件变为可执行文件: chmod +x 文件名
指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod mode file…
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
mode : 权限设定字串,格式如下 : [u g o a][[+ - =][r w x X]…][,…],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
chmod也可以用数字来表示权限 如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
执行文件方式:
- 当前Shell: source / .
- 新建子Shell: 1. /bin/bash 文件名 2. ./文件名
重定向
< //标准输入重定向
//标准输出重定向 清空原先的内容后添加新的内容//标准输出重定向 在原来内容换行下方添加新的内容
n >& m 表示:将输出文件 m 和 n 合并,而且n重定向到m。
n <& m 表示:将输入文件 m 和 n 合并,而且n重定向到m。
/dev/null 文件
//例子:
./test.exe >/dev/null 2
//结果知道把屏幕上比显示错误信息。这可是自欺欺人哦,一般还是不要这样做的好哦。
/dev/null是一个特殊的文件,写入到它的内容想到与被丢弃,像极了windows的回收站,可是如果我们从null找文件可是什么都赵不到的哦
-
程序自身都有I/O
0 – 标准输入
1 – 标准输出
2 – 错误输出 -
控制程序I/O(输入/输出)位置
-
Linux中一切皆文件
-
程序是否处理I/O
-
绑定顺序: 从左到右
-
重定向有顺序
-
重定向操作符
左侧与文件描述符不能有空格,
右侧,如果也是文件描述符,需要搭配&。同时与&符号不能有空格
例:ls -l / /tmp 1 > out.txt 2>& 1 1代表 / 的输出, 2 代表/tmp的输出。 把 / 下的文件的内容输入到out.txt中, 然后吧/tmp的内容追加到 / 的输出文件的后面
引用
双引号: 弱引用,参数扩展 单引号: 强引用,不可嵌套
退出状态与逻辑判断
echo $? 0为执行成功 其他为失败 a || b a为错误执行b,a正确不执行b a && b a为真执行b,a为假不执行b
算数表达式
let 算数运算表达式 let c = $A + $B $((算数表达式)) c = $(($A+$B))
流程控制表达式
-
if
-
while
-
for
练习:
用户给定路径, 输出文件大小最大的文件 递归子目录
#! /bin/bash
oldIFS=$IFS
IFS=$'\n'
for i in `du -a $1 | sort -nr`;do
filename=`echo $i | awk '{print $2}'`
if [ -f $filename ];then
echo $filename
break
fi
done
IFS=$oldIFS
在linux中添加用户
#! /bin/bash
[ ! $# -eq 1 ] && echo "args error!!!" && exit 2
id $1 >&/dev/null && echo "user exist" && exit 3
useradd $1 >&/dev/null && echo $1 | passwd --stdin $1 >&/dev/null && echo "user add success" && exit 4
echo "I don`t know, user add fail" && exit 5