shell脚本

shell基础

shell命名: shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾
不能使用特殊符号、空格
名称要写的一眼可以看出功能,也就是顾名思义
shell脚本首行需要#!/bin/bash开头
shell脚本变量不能以数字、特殊符号开头,可以使用下划线 _,但不能 用破折号——

创建一个脚本,并且执行脚本

   69  vim helloworld.sh

四种执行方式:
   70  bash helloworld.sh
   71  sh helloworld.sh
   72  source helloworld.sh    //在当前进程运行脚本
   73  chmod +x helloworld.sh
   74  ./helloworld.sh

变量的分类

1、自定义变量:由用户自己定义、使用和修改
2、环境变量:由系统维护,用于设置工作环境
3、位置变量:通过命令行给脚本程序传递参数 (也属于预定义变量)
4、预定义变量 : Bash中内置的一类变量,不能直接修改

 变量的定义和输出:

1、定义一个新的变量
格式:变量名=变量值
注意:变量名必须以字母或下划线开头,严格区分大小写
2、变量符号运用
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号: 或$(): 命令替换,提取命令的执行结果
3、输入和输出
输入格式:read [-p "显示的提示信息"] 变量名 ( -s 无回显)
输出格式:echo $变量名

判断语句

(1)条件判断$?的应用
Shell的返回值:运行一条命令,都会有一个返回值。0代表执行正常,非0代表命令执行异常。

(2)if条件判断语句
1、if 单分支语句

2、if 多分支语句

(3)数字判断
格式:
-eq:equal,等于,一般用于 [ $? -eq 0 ],也就是判断上条命令返回值等于 0,直接数字 -eq 数字
也可以
-ne:not equal,不等于,一般用于 [ $? -ne 0 ],判断上条命令返回值不等于 0
-gt:greater than,大于
-ge:greater or equal,大于或等于
-lt:less than,小于
-le:less or equal,小于或等于

(4)字符串判断
格式:
[ 字 符 串 1 = = 字 符 串 2 ] 字 符 串 内 容 相 同
[ 字 符 串 1 != 字 符 串 2 ] 字 符 串 内 容 不 同
[ - z 字 符 串 ] 字 符 串 内 容 为 空
[ - n 字 符 串 ] 字 符 串 内 容 不 为 空
(5)文件、目录、权限的判断
格式:
[ 操作符 文件或目录]
(6)与或判断
判断多个条件
多个条件其中一个成立,或
多个条件都要成立,与
或运算判断:|| 或,两个条件满足其一即可,还有-o
与运算判断:&& 与,两个条件都得满足才行,还有-a
(7)多重判断语法 elif
(8)多重判断的 case 语句

循环语句

(1)for循环
(2)while循环
(3)循环的 break 和 continue
break直接结束循环,循环立即退出
continue可以用来跳过一次循环,跳过后循环继续,直到循环停止

sed流式编辑器

sed 是文本处理工具,读取文本内容,根据指定条件进行处理,可实现增删改查的功能。
sed 依赖于正则表达式
sed 选项 “(定位符)指令” 文件名
(定位符)指令---想对文件的哪一行进行操作
选项:
-e   指定要执行的命令 (操作) ,只有一个编辑命令 (操作) 时可省略
-n   屏蔽默认输出 //不加选项-n默认先全文打印再执行命令打印所要求内容
-i    直接修改源文件,不输出结果
-r    支持扩展正则
sed修改配置:

基础脚本

1.

[root@git ~]# vim test001.sh

#!/bin/bash

echo $1
echo $2
echo $3
echo $4
echo $5

[root@git ~]# bash test001.sh 1 2 3 4 5
1
2
3
4
5

 

2.非交互式创建用户和密码

c[root@git ~]# vim passwd.sh

#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1

[root@git ~]# sh passwd.sh xxx xxxx
更改用户 xxx 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@git ~]# su xxx
[xxx@git root]$ 

3.if条件语句

[root@git ~]# vim menu.sh

#!/bin/bash
echo "1新曾文件 2删除文件 3查找文件 4修改文件"
read -p "选择:" m
if [ $m == 1 ];then
     touch aaaaa.txt
elif [ $m == 2 ];then
     rm -rf aaaaa.txt
else
    echo "无"
fi

[root@git ~]# sh menu.sh
1新曾文件 2删除文件 3查找文件 4修改文件
选择:1
[root@git ~]# ls
aaaaa.txt  

4.注册用户密码,不显示密码

[root@git ~]# vim register.sh

#!/bin/bash
read -p "username:" username
read -p "passwd:" -s passwd
useradd $username
echo $passwd | passwd --stdin $username
if [ $? -eq 0 ];then
   echo "账户$username注册成功"
fi

[root@git ~]# sh register.sh
username:xiaowang
passwd:更改用户 xiaowang 的密码 。  //不显示密码
passwd:所有的身份验证令牌已经成功更新。
账户xiaowang注册成功

5.利用awk查看/etc/passwd中的第一列参数

[root@git ~]# vim showuser.sh

#!/bin/bash
for u in $(awk -F ':' '{print $1}' /etc/passwd)
do
  echo $u
done

[root@git ~]# sh showuser.sh
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games

6.预定义变量:Bash中内置的一类变量,不能直接修改

$0 :代表脚本本身的文件名。
$# :表示传递给脚本的参数个数。
$* :以一个字符串的形式返回所有的参数。
$@ :以多个字符串的形式返回所有的参数,每个参数占一行。
$$ :当前脚本的进程 ID 。
$? :上一个命令的退出状态。如果上一个命令成功执行,返回 0 ;否则返回非 0 值。

[root@git ~]# vim loop.sh

#!/bin/bash
for x in $*
do
  echo $x
done

[root@git ~]# sh loop.sh wo shi ren 
wo
shi
ren

7.检测网络是否畅通脚本

[root@git ~]# vim ping.sh

#!/bin/bash
read -p "输入要检测的网址:" web
ping -c 3 $web &> /dev/null
if [ $? -eq 0 ]; then
  echo "网络畅通"
else
  echo "网络不可达"
fi

 

[root@git ~]# sh ping.sh
输入要检测的网址:www.baidu.com
网络畅通

 

8.检测网络是否可达

[root@git ~]# vim ping1.sh

#!/bin/bash
for ip in $(echo 192.168.118.{50..70})
do
   ping -c 2 -i 0.1 $ip &> /dev/null
   if [ $? -eq 0 ];then
     echo "$ip网络up"
   fi
done

[root@git ~]# sh ping1.sh
192.168.118.60网络up

9.
 

[root@git ~]# vim server.sh
#!/bin/bash
read -p " 现在请输入一个你想要的 ip 地址: " ip
sed -i 's/dhcp/none/g' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$a
IPADDR='"$ip"'\nNETMASK=255.255.255.0\nGATEWAY=10.0.0.2\nDNS1=8.8.8.8\nDNS2=1
14.114.114.114' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '/UUID/c UUID='"$(uuidgen)"'' /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
setenforce 0
read -p " 现在请输入你想要的主机名: " hostname
hostnamectl set-hostname $hostname
echo " 注意:在重启后用户名才会生效,重启命令为 reboot"
[root@git ~]# source server.sh
现在请输入一个你想要的 ip 地址: 10.0.0.200
setenforce: SELinux is disabled
现在请输入你想要的主机名: hh
注意:在重启后用户名才会生效,重启命令为 reboot
[root@git ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b3234856-4ff2-42bc-bb28-34deced3b945
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.200
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
DNS1=8.8.8.8
DNS2=114.114.114.114

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值