1. sh 参数
$*
输入了什么参数
$#
输入了多少个参数
$1
输入的第一个参数,依此类推,直到 $9
$?
上一次的执行结果
$*
为”1 2 3”(一起被引号包住)
$@
为”1” “2” “3”(分别被包住)
$#
为3(参数数量)
2. 文件测试
- [ -d target ] target 是否是 目录
- [ -f target ] 是否是文件
- [ -e target ] 是否存在(目录和文件都适用)
- [ -x target ] 可执行文件
- [ -n “target” ] 是否不为null(non-zero),用双引号把变量名包起来
- [ -z “target” ] 字符串是否为空(zero),用双引号把变量名包起来
详情 见man test
3. 数值型比较
//变量赋值时,”=” 左右两边不能有空格
age=30
if [ $ -ge 20]
then
echo“age is bigger than 20”
else
echo“age is less than 20”
fi
// ---others-----
–eq(equals)
–ne(not equal)
-gt( greater than)
-lt(lessthan)
-ge(greater or equal than)
-le(less than or equal )
eg:
bootpercent= df –hT | grep “sda1” | awk “{print $6}” | cut –d "%" –f1
if [$bootpercent –ge 80 ];then
echo "percent is bigger than 80,warning!!!"
else
echo "percent is less than 80"
fi
4. 字符串比较
```bash
# "=" 需要空格
[ str1= str2 ]
# str 是否为空
[ -z str ]
```
5. 逻辑条件测试
&& ||
if
If [ $age–ge 30 ];then
echo "great than 30"
elif [ $age –ge 40 ];then
echo “great then 40”
else
echo “50”
fi
case
#`` 里面是命令:今天周几
week= `date +%w`
case$week in :
start):
echo“start”
;;
stop):
echo“stop”
;;
*):
Echo “other”
;;
esac
6. 循环条件测试
while
num=3
while [ $num –ge 0 ]
do
echo$num
num=$(($num-1)) # ‘=’左边的num不需要$ ?
done
echo$num
for
for i in ` cat /var/user.txt`
do
echo$i
echo123 | passwd –stdin $i
done
7. shift:传入的参数左移
num=0
while [ $# -gt 0 ]
do
num=$((num+ $1))
shift
done
echo $num
8. find
find/etc/ -perm 755 –type f
# 跟find /etc –perm 755 | find –type f 不是一样,切记
find /etc –user root
find /etc –iname 'user*' | xargs rm –f
9. awk
# $0->整行,$1->第一列
# NR(Number Row):行号
# NF(Number Field):列号
cat/etc/passwd | awk –F ":" '{if(NR==3)print $1,$4}' ->打印第三行的第一个和第四个字段
cat/etc/passwd | awk –F 'END{print NR}' ->总共多少行
cat/etc/passwd | awk –F ‘END{print NF}’ ->总共多少列
cat/etc/passwd | awk –F “:” ‘{if(){print $1”\t”$4}}’
cat/etc/passwd | awk ‘$1 ~/192.168.10.1/ {print $0 } ’ -> ~ 匹配,!~ 不匹配
10.sed
# p -> print, d-> delete
cat/etc/passwd | sed –n '5'p –> 打印第五行
cat/etc/passwd | sed '3,6'd -> 打印删除3-6行之后的内容
cat/etc/passwd | sed '/bash/' p -> 打印匹配bash 的行
cat/etc/passwd | sed –n '1,/sync/'p -> 打印第一行到匹配sync的行
cat/etc/passwd | sed –n '/root/,$'p -> 打印从匹配root 到结尾的所有行
cat/etc/passwd | sed –n '3'p | awk –F ":" '{print $4}' –> 39%
cat/etc/passwd | sed –n '3'p | awk –F ":" '{print int($4)}' –> 39
11. uniq 与 sort
uniq–c #统计连续的次数
catfile | sort –t: -k1 –r # 以:为分隔符,取第一列,倒序排列
12. linux 启动流程
一:初始化阶段
- Grub 引导界面
- 识别硬件
- 初始化驱动
二:加载/etc/rc.d/rc.sysinit 系统初始化
- 进入欢迎界面
- 设置时钟
- 设置主机名
- 挂载文件系统
- 挂载光驱
- 进入3级别
- 启动虚拟内存
- 设置磁盘阵列
三:加载 /etc/rc.d/rc 进程管理脚本
- 设置防火墙
- 检测硬件变化
- 启动网络服务
- 启动3级别中允许启动的进程(/etc/rc.d/rc3.d中以S开头的服务名,S99以后就是登陆界面了)
- 进入登陆界面
13. 运行级别:(默认是3)
0
: halt
1
: singlemode user
2
: multiuser without NFS
3
: full multiuser
4
: unused
5
: X11 ( 3 with 图形界面)
6
: reboot (所以,重启的话reboot,还可以 init 6)
查看运行级别 runlevel
14. 如何设置服务脚本在某个级别下开启或者关闭(以sshd为例)
- 查看sshd 服务在所有级别下的开关状态
chkconfig –list sshd
- sshd 在 3 级别下开启/关闭
chkconfig –level 3 sshd on/off
将自己的服务脚本改造成标准的rpm脚本
cp sshd /etc/init.d
在 xxx 中添加:
#chkconfig:2345 90 20
(90为开机的顺序,20为关机的顺序,数值越大,优先级越高,自定义的脚本开机应较晚5,关机较早)
#descrption: xxx server daemon
通过service 把自定义脚本进行开启和关闭
service xxx start|stop|restart
- 通过chkconfig把自定义脚本设置为开机启动
chkconfig xxx on/off
15. 原格式输出字符以及调用其他脚本
menu.sh
# Cat 的 heredoc使用方法
#
cat << eof
aaaaaaaaaaaaaa
bbbbbbbbbbbbb
cccccccccccccccc
eof
# 引用 menu.sh
. menu.sh
16. 设置颜色
# \033[ 设置颜色的标志,30 前底色,47 背景色,0m 还原
echo –e "\033[30;47m $str \033[0m"