Shell脚本学习(2)

一 条件测试

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...);

显示主机的网络名称;

O 显示domain name;

操作系统的版本(相当于uname -r);

显示本地端时间的时间;

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权限

愿有志之人,成就非凡之事。
原文地址:https://www.cnblogs.com/damon-song/p/13194543.html