1. 带提示的输入
#!/bin/bash
read -p "input file name:" FILENAME
echo $FILENAME
2. 常用判断标志
-c 字符设备
-d 文件夹
3. 参数相关
$0 脚本名称; $1 第一个参数
4. switch-case 语句
case $1 in
'start')
echo "start";;
'stop')
echo "stop";;
*)
echo "error";;
esac
5. 添加用户和组,变量计算赋值,更改文件所属,删除用户
i=1
groupadd class1
while [[ $i -le 30 ]];do
if [[ $i -le 9 ]];then
USERNAME=stu0$i
else
USERNAME=stu$i
fi
useradd -G class1 $USERNAME
chown -R $USERNAME /home/$USERNAME
chgrp -R class1 /home/$USERNAME
userdel -r $USERNAME
i=`expr $i + 1` # 另一种写法 i=$(( $i + 1 )) 注意括号两边的空格 expr 表达式注意空格
done
6. 定时任务
# vim /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 8-18/1 * * * => 8点到18点每小时执行一次
0 23,1-8/2 * * * => 23点到8点 每隔两个小时
7. 文本处理
cut -f1 == > 提取文本第一列,默认 tab 分隔,
使用 -d 制定分隔符,如 cut -d "," -f1 ( f1-3 f1,3 指定多列 )
sed–i '23s/test/tset/g' test.txt ==> 替换 23 行 test 为 tset
sed -n '5p' test.txt | cut -f3 ==> 查看第5行第3列
sed -i '1,3d' test.txt ==> 删除1到3行
echo -n ==> 不换行输出
awk -F "," '{if($2>56789){print $0}}' file.txt ==> 显示第二列大于56789的行
sed -n "1p;3p;5p;7p;10p;15p" file.txt ==> 查看 1,2,5,7,10,15 行
或 awk 'NR==1||NR==3||NR==5||…||NR=15{print $0}' file.txt
sed -i "s#\t#\|#g" file.txt ==> 将 tab 替换成 |
其实直接这样写也可以 sed -i 's/\t/|/g' file.txt
grep -n 显示行号
head -n 3 显示前3行
8. 日期处理
date "+%y-%m-%d %H:%M:%S" 格式化输出
9. 浮点数运算
$(echo "$i + $j" | bc)
10. For 循环
for (( j=1;j<=3;j++ ));do
echo $j
done
for i in $array;do
echo $i
done
11. 运算相关
($(du ./*)) ==> 最外边的小括号是为了构造数组
${#A[@]} == 取得数组 A 的长度
$(VAR%sh) 去掉变量末尾的 sh
12. 文件操作
find / -size +50k -size -100k ==> 找出 大于 50K 小于 100K 文件
13. su 和 su - 的区别
su 目录不切换,环境变量不改变
su - 彻底切换为 root 用户,包括所在路径和环境变量
14. sudo 和 su 的区别
a. 需要的密码不同,具有 sudo 权限的用户无需知道 root 密码就可以执行提权命令
b. sudo 是临时提高执行权限,su 是直接使用了 root 用户权限,su 比 sudo 危险系数高