一 条件测试
1.类型
文件测试、数值比较、字符串比较
2.小程序
if ! test -d $1;then #测试参数1是否是目录 mkdir $1 #不是目录则创建目录 fi
if [ ! -d $1 ]; then #和上面含义相同 mkdir $1
fi
#test 命令 相当于 [ ] 命令
if [ $UID -ne 0];then #判断用户权限是否等于0 echo "no permission" exit fi if [$USER != "root"];then #判断用户是否是root echo "no permission" exit fi
通过man test 去查看所有判断选项
3.字符串比较
提示:使用双引号
["$USER" = "root"]; echo $?
["$USER" == "root"]; echo $?
[-z "$damon"] 字符长度是0
[-n "$damon"] 字符长度不是0
例子:
damon@ubuntu:~$ v1= damon@ubuntu:~$ [ -z $v1 ];echo $? 0 damon@ubuntu:~$ [ -n $v1 ];echo $? 0 damon@ubuntu:~$ [ -n "$v1" ];echo $? 1 damon@ubuntu:~$
可以看出字符串变量是否加双引号的结果是不一样的,加双引号的结果是正确的!
4.数值比较
root@ubuntu:/# [ 1 -lt 2 -a 5 -gt 10 ];echo $? 1 root@ubuntu:/# [ 1 -lt 2 -o 5 -gt 10 ];echo $? 0 root@ubuntu:/# [[ 1 -lt 2 && 5 -gt 10 ]];echo $? 1 root@ubuntu:/# [[ 1 -lt 2 || 5 -gt 10 ]];echo $? 0
5.If
#!/usr/bin/bash cat <<-EOF ########################### # A.Ross # # B.Chandler # # C.Joey # # D.Richel # # E.Fibe # # F.Monica # ########################### EOF read -p "Which person do you like best: " name if [ "$name" == "A" ];then echo "Ross" elif [ "$name" == "B" ];then echo "Chandler" elif [ "$name" == "C" ];then echo "Joey" elif [ "$name" == "D" ];then echo "Richel" elif [ "$name" == "E" ];then echo "Fibe" elif [ "$name" == "F" ]; then echo "Monica" else echo "Unknown name" fi
6.模式匹配:case
case只能进行字符串匹配
case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列3
;;
*)
无匹配后命令序列
esac
例子:
#!/usr/bin/bash cat <<-EOF ########################### # A.Ross # # B.Chandler # # C.Joey # # D.Richel # # E.Fibe # # F.Monica # ########################### EOF read -p "Which person do you like best: " name case "$name" in A|a) echo "Ross" ;; B|b) echo "Chandler" ;; C|c) echo "Joey" ;; D|d) echo "Richel" ;; E|e) echo "Fibe" ;; F|f) echo "Monica" ;; *) echo "Unknown name" ;; esac
二 循环
1.for
for 变量名 [in 取值列表]
do
循环体
done
for i in `seq 4` do echo i done
2.while
while 条件
do
循环体
done
#!/bin/bash i=1 while [ $i -le 4 ] do echo "$i" i=$[$i+1] done
三 其他
1. 更改终端登陆界面
更改/etc/issue中的内容
默认内容
issue内的各代码意义
\d 本地端时间的日期;
\l 显示第几个终端截面
\m 显示硬件的等级(i386/i486/i586/i686...);
\n 显示主机的网络名称;
\O 显示domain name;
\r 操作系统的版本(相当于uname -r);
\t 显示本地端时间的时间;
\S 操作系统的名称;
\v 操作系统的版本;
2. 字符串转换命令
tr: 可以用来删除一段信息当中的文字,或是进行文字信息的替换;
col:可以用来处理将tab键转换成空格键;
join:主要用在处理 两个文件当中,有相同数据的那一行,才将它加在一起 的意思。在适用join之前,你所需要处理的文件应该要事先经过排序;
past:直接将两行贴在一起,且中间以tab键隔开;
expand:就是将tab按键转成空格键;
unexpand:将空格转换成tab键;
3.当创建用户后,没有创建家目录时
cp -a /etc/skel /home/damon ///etc/skel是家目录的模板,所有账号在创建时,都是复制的该目录
chown -R damon:damon /home/damon //设置家目录的拥有这和组拥有者
chmod 700 /home/damon //给目录拥有者设置r w x权限