首页 > 系统相关 >shell语句

shell语句

时间:2024-07-11 23:08:09浏览次数:10  
标签:语句 bin shell echo nginx moudle01 root bash

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

标签:语句,bin,shell,echo,nginx,moudle01,root,bash
From: https://www.cnblogs.com/xuruizhao/p/18297337

相关文章

  • Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和
    场景存储过程存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与己定义好的存储过程的功能相同的服务时,......
  • 一条SQL查询语句是如何执行的??
    我想来跟你聊聊MySQL的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语......
  • shell编程基础
    shell脚本编程基础【1】、shell概述shell是一门编程语言,如:C、C++、java、PHP、pythonGo等语言分类编程型语言:C、C++、Go等为编译型语言。程序运行需要提前编译,编译语言都有编译器解释型语言:shell、PHP、python等为解释型语言,程序在运行时不需要提前编译,一边执行,一边......
  • 实战篇——SSRF漏洞Redis反弹shell实战
    实战篇——SSRF漏洞Redis反弹shell实战SSRF之Redis实战上一章中利用file伪协议实现了内网的主机探测,发现存在192.168.118.151,对其进行端口探测:可见开放了6379端口,结合响应判断为Redis服务。而Redis存在未授权访问漏洞,可以利用该漏洞实现信息泄露、数据删除以及反弹shell,下面......
  • 手写持久层框架------无需写sql语句即可完成对单表的CRUD操作。
    目的:巩固知识点技术栈:java+mysql+反射+自定义注解+泛型+jdbc持久层框架:与数据库交互的一层成为持久层。完成orm操作o(Object对象) r:(relative关系)  m:(mapping映射)。实体类---数据库表  属性---表的字段  实体类对象----一条记录  集合----表中多条记录手......
  • 查看SQLServer最耗资源时间的SQL语句(转载)
    sqlserver中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sqlserver中如何查看执行效率不高的语句,供您参考。 1.找出执行时间最长的10条SQL(适用于SQLSERVER2005及其以上版本)Sql代码SELECTtop10(total_elapsed_time/execution_count)......
  • Linux-shell编程入门基础
    目录前言Shell编程bash特性shell作用域变量环境变量$特殊变量$特殊状态变量$特殊符号(很重要)其他内置shell命令shell语法的子串截取统计指令执行时间练习shell特殊扩展变量父子shell的理解内置和外置命令区别数值计算双括号(())运算letexprexpr模式匹配bcawk中括号shell的条件判......
  • Shell实战之SSH+Shell脚本实现远程控制多主机
    问题引入我在学习Hadoop,Spark等框架时,发现配置伪分布式环境时经常需要同时控制多台主机,Moba自带的MultiExec并不适合同时控制4台以上的主机。因此我自己设计了一段简单的shell脚本实现了这一功能。准备在使用这个脚本之前需要预先实现集群间的IP地址映射vim/etc/hosts按......
  • python执行shell并获取结果
    在Python中执行Shell命令并获取其结果,通常可以使用subprocess模块。这个模块允许我们启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。下面是一个详细的示例,展示了如何使用subprocess.run()函数来执行Shell命令并获取其输出。1.示例一:使用subprocess.run()执行......
  • Java面向对象基础篇综合训练(附带全套源代码及逐语句分析)->基于javabeen
    一、前言还是那句话面向对象是Java的重点,同时也是难点,小编会在此部分分享一些综合型的案例,难度从易到难,本篇文章只是一些基础的操作,综合能力并不是太高。大家可以试着观看一遍自己去打开编译器尝试一下。不知道有多少读者是跟着小编进行学习的,今天是学习Java的第五天,希望大家......