shell语句

shell语句

语句格式:

在家目录下编写.vimrc文件,设置tab键缩进为4格

vim ~/.vimrc

autocmd FileType sh set ai ts=4

【1】、条件判断

双分支

#!/bin/bash
if [ $UID -eq 0 ];then
        echo "我是管理员"
else
        echo "我不是管理员"
fi
# 检测某一目录是否存在
#!/bin/bash
if [ -e /if_test/cdrom ];then
        echo "OK"
else
        mkdir -p /if_test/cdrom
        echo "OK"
fi
#!/bin/bash
  
ping -c 3  -i 0.2 -W 1 192.168.121.180 &> /dev/null

if [ $? -eq 0  ];then
        echo "通了"
else
        echo "没通"
fi

多分支

if

elif

...

else

fi

#!/bin/bash
  
read -p "请输入你的分数:" sorce
if [ $sorce -ge 90 ] && [ $sorce -le 100 ];then
       echo "优秀"
elif [ $sorce -ge 60 ] && [ $sorce -le 89 ];then
        echo "及格"
else
        echo "不及格"   
fi

【2】、循环

1、for循环

for 变量名 in 值1 值2 值3.....

do

命令

done

#!/bin/bash
  
for i in 1 2 3 4 5
do
    echo $i
done
[root@moudle01 20:55:43  /script]# source test04.sh 
1
2
3
4
5
#!/bin/bash
  
a=100
for i in {1..$a}
do
    echo $i
done
# for循环不支持变量
[root@moudle01 20:57:22  /script]# source test04.sh 
{1..100}
#!/bin/bash
  
a=10
for i in $(seq $a)
do
    echo $i
done
[root@moudle01 20:59:44  /script]# source test04.sh 
1
2
3
4
5
6
7
8
9
10
# 批量添加用户
#!/bin/bash
  
for i in  $(cat /script/name.txt)
do
    cat /etc/passwd | awk -F: '{print $1}' | grep $i
    if [ $? -eq 0 ];then
        echo "$i已经被创建"
    else
        useradd $i
        echo $i | passwd --stdin $i
    fi
done
echo "初始密码为用户名"
# 探测一个网段的主机哪个存活
#!/bin/bash
a=255
alive=0
refuse=0
for i in $(seq $a)
do
    ping -c 2 -i 0.2 -W 1 192.168.121.$i  &> /dev/null
    if [ $? -eq 0 ];then
        echo "192.168.121.$i 存活"
        let alive++
    fi
done
let refuse=$a-$alive
echo "$alive台主机通了"
echo "$refuse台主机不通"

C语言版的for循环

for ((变量;条件;增量))

do

命令

done

#!/bin/bash
  
i=1
for ((i;i<=5;i++))
do
echo $i
done

2、while循环

如果条件为“:”

则表示永真,代表死循环

#!/bin/bash
  
i=1
while [ $i -le 7 ]
do
    useradd user$i
    let i++
done

(1)、中断即退出

exit:结束循环以及整个脚本

break:结束循环,继续执行循环后面的命令

continue:结束本次循环,立刻开始下一次循环

【3】、case分支

case 变量 in

模式1)

​ 命令;;

模式2)

​ 命令;;

*)

​ 命令;;

esac

#!/bin/bash
  
case $1 in
t)
    touch /opt/hahaha;;
m)
    mkdir /opt/hahah;;
r)
    rm -rf /opt/haha;;
*)
    echo "输入错误"
esac

安装nginx

将nginx安装包放在/opt下

#!/bin/bash
# 安装依赖
yum install -y gcc make pcre-devel openssl-devel 

tar -xf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure
make
make install

通过脚本控制nginx启动停止

#!/bin/bash
  
case $1 in
start | kai)
    /usr/local/nginx/sbin/nginx;;
stop | guan)
    /usr/local/nginx/sbin/nginx -s stop;;
status)
    netstat -tunple | grep -q nginx
    if [ $? -eq 0 ];then
       echo -e "\033[35mnginx服务已开启\033[0m"
    else
        echo -e "\033[35mnginx服务未开启\033[0m"
    fi;;
*)
    echo "输入错误"
esac

【4】、函数

形式一:

function 函数名 {

​ 命令

}

形式二:

函数名(){

​ 命令

}

# 进一步完善nginx服务控制脚本
#!/bin/bash
  
a(){
    echo -e "\033[$1mnginx服务已$2\033[0m"
}
case $1 in
start | kai)
    /usr/local/nginx/sbin/nginx;;
stop | guan)
    /usr/local/nginx/sbin/nginx -s stop;;
status)
    netstat -tunple | grep -q nginx
    if [ $? -eq 0 ];then
        a 35 启动
    else
        a 35 关闭
    fi;;
*)
    echo "输入错误"
esac

【5】、字符串处理

1、字符串切割

$

#!/bin/bash
  
i=1
a=qazwsxedcrfvtgbyhnujmikolpQAZWSXEDCRFVTGBYHNUJMIKOLP1234567890
set_passwd(){
    for s  in {1..8}
    do
        n=$[RANDOM%62]
        p={a:$n:1}
        pass+=$p
    done
    echo $pass | passwd --stdin $1
    pass=
    s=0
}
while [ $i -le 7 ]
do
    useradd "user$i"
    set_passwd user$i
    let i++
done

2、字符串替换

${变量名/旧/新}:只替换找到的第一个

${变量名//旧/新}:替换找到的所有

${变量名/旧/}:找到并删除

[root@moudle01 11:01:34  ~]# a=qazwddcfvb
[root@moudle01 11:03:38  ~]# echo ${a/a/o}
qozwddcfvb
[root@moudle01 11:03:52  ~]# echo ${a//d/l}
qazwllcfvb
[root@moudle01 11:04:26  ~]# echo ${a//q}
wwweee

3、字符串删除(掐头去尾)

${变量名#元素}:从头上开始删除,第一个元素必须是开头的第一个

${变量名%元素}:从尾开始删除,最后一个元素必须是最后一个

[root@moudle01 11:04:35  ~]# a=aaasssdddfff
[root@moudle01 11:05:25  ~]# echo ${a#aaa}
sssdddfff
[root@moudle01 11:05:35  ~]# echo ${a%fff}
aaasssddd

结合*去使用

[root@moudle01 11:05:42  ~]# a=abcdacgglirt
[root@moudle01 11:09:08  ~]# echo ${a#*d}
acgglirt
[root@moudle01 11:09:24  ~]# echo ${a#*g}
glirt
[root@moudle01 11:09:50  ~]# echo ${a##*g}
lirt
[root@moudle01 11:09:55  ~]# echo ${a%g*}
abcdacg
[root@moudle01 11:10:26  ~]# echo ${a%%g*}
abcdac

将后缀名为.txt的文件修改为.doc

#!/bin/bash
  
for i in $(ls *.$1)
do
    name=${i%.*}
    mv $i $name.$2
done
[root@moudle01 11:22:52  /script]# source rename.sh  doc txt
posted @ 2024-07-11 22:48  Linux小菜鸟  阅读(1)  评论(0编辑  收藏  举报