加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Shell脚本基础 day1(20191011)

发布时间:2020-12-16 01:39:05 所属栏目:安全 来源:网络整理
导读:什么是脚本: 一个可以执行文件,可以实现某种功能 人:创建用户tom 计算机:useradd tom 规范Shell脚本的一般组成 ? #! 环境声明,声明以下所有的代码有谁进行翻译 ? # 注释文本 ? 可执行代码 [[email?protected] ~]# vim /root/hello.sh #!/bin/bash echo h
什么是脚本:
一个可以执行文件,可以实现某种功能

 人:创建用户tom     计算机:useradd tom

规范Shell脚本的一般组成

? #! 环境声明,声明以下所有的代码有谁进行翻译
     ? # 注释文本
    ? 可执行代码

[[email?protected] ~]# vim /root/hello.sh
#!/bin/bash
echo hello world
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2

[[email?protected] ~]# /root/hello.sh

重定向输出

>:只收集前面命令的正确信息
 2>:只收集前面命令的错误信息
 &>:正确与错误都收集

[[email?protected] ~]# echo 123 > /opt/1.txt
[[email?protected] ~]# cat /opt/1.txt
[[email?protected] ~]# cat /opt/1.txt /a

[[email?protected] ~]# cat /opt/1.txt /a > /mnt/b.txt
[[email?protected] ~]# cat /mnt/b.txt

[[email?protected] ~]# cat /opt/1.txt /a 2> /mnt/b.txt
[[email?protected] ~]# cat /mnt/b.txt

[[email?protected] ~]# cat /opt/1.txt /a &> /mnt/b.txt
[[email?protected] ~]# cat /mnt/b.txt

为了适应多变的需求与多变环境,所以使用变量         

使用变量:会变化的量    类似于容器   以不变的名称,存储可以变化的值

 变量名=存储的值

降低脚本运行难度,产生交互,获取到用户输入的内容

 read -p  ‘屏幕输出信息‘

         1.产生交互
         2.记录用户在键盘上所有的输入
         3.将用户在键盘上所有的输入,赋值给一个变量储存

? 设置变量时的注意事项

– 若指定的变量名已存在,相当于为此变量重新赋值
    – 等号两边不要有空格
  – 变量名只能由字母/数字/下划线组成,区分大小写
   – 变量名不能以数字开头,不要使用关键字和特殊字符

查看/引用变量

? 基本格式
   – 引用变量值:$变量名
   – 查看变量值:echo $变量名、echo ${变量名}

[[email?protected] ~]# a=rhel
[[email?protected] ~]# echo $a

[[email?protected] ~]# echo $a7

[[email?protected] ~]# echo ${a}7

[[email?protected] ~]# a=CentOS

[[email?protected] ~]# echo ${a}7

补充:
       单引号 ‘‘ :  取消所有特殊字符的意义

[[email?protected] ~]# echo ‘

[[email?protected] ~]# echo ‘* ? | ‘

  • ? |
    [[email?protected] ~]# a=10
    [[email?protected] ~]# echo $a
    10
    [[email?protected] ~]# echo ‘$a‘
    $a
    [[email?protected] ~]#

    变量的种类

    环境变量: 变量名一般都大写,用来设置用户/系统环境
    由系统定义完成,并且赋值完成

    常见的环境变量: 
          USER=存放当前系统登陆的用户名

[[email?protected] ~]# echo $USER
root
[[email?protected] ~]# su - dc
[[email?protected] ~]$ echo $USER
dc
[[email?protected] ~]$ exit
logout
[[email?protected] ~]# su - student
[[email?protected] ~]$ echo $USER
student
[[email?protected] ~]$ exit
logout
[[email?protected] ~]#

PATH=提供命令程序搜寻的路径

[[email?protected] ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[[email?protected] ~]# vim /opt/hello.sh
echo I Love Dc
[[email?protected] ~]# chmod +x /opt/hello.sh
[[email?protected] ~]# /opt/hello.sh
I Love Dc
[[email?protected] ~]# hello.sh
bash: hello.sh: 未找到命令...

[[email?protected] /]# cp /opt/hello.sh /usr/bin/
[[email?protected] /]# hello.sh

位置变量:非交互式传递命令行参数

       ? 在执行脚本时提供的命令行参数
     – 表示为 $n,n为序号
       – $1、$2、.. .. ${10}、${11}、.. ..

预定义变量

? 用来保存脚本程序的执行信息
    – 直接使用这些变量
    – 不能直接为这些变量赋值

$# 已加载的位置变量的个数,专门用于判断用户是否输入命令行参数
$? 程序退出后的状态值,0表示正常,其他值异常

[[email?protected] ~]# vim /root/1.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $#
[[email?protected] ~]# /root/1.sh haha xixi hehe lele

[[email?protected] ~]# vim /root/3.sh
#!/bin/bash
echo 您一共输入了$#个参数
[[email?protected] ~]# chmod +x /root/3.sh
[[email?protected] ~]# /root/3.sh
[[email?protected] ~]# /root/3.sh hehe lele

条件测试及选择

条件测试
      – [   测试表达式   ]      #每一部分之间都要有空格

  常用的测试选项
   ? 检查文件状态
       -e:数据存在才为真
      -d:数据存在,并且必须为目录才为真
       -f:数据存在,并且必须为文件才为真

[[email?protected] ~]# [ -f /etc/passwd ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]# [ -d /etc/passwd ]
[[email?protected] ~]# echo $?
1
[[email?protected] ~]# [ -d /etc ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]# [ -e /abc ]
[[email?protected] ~]# echo $?
1

? 比较整数大小

-gt:大于
        -ge:大于或等于
-eq:等于
-ne:不等于
-lt:小于
-le:小于或等于

[[email?protected] ~]# [ 1 -eq 1 ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]# [ 2 -ge 1 ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]# [ 2 -ge 2 ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]# [ 2 -gt 2 ]
[[email?protected] ~]# echo $?
1

? 字符串比对

==:两个字符串一致为真                           
    !=:两个字符串不一致为真

[[email?protected] ~]# [ student == haha ]
[[email?protected] ~]# echo $?
1
[ro[email?protected] ~]# [ root == $USER ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]# [ student != haha ]
[[email?protected] ~]# echo $?
0
[[email?protected] ~]#

if选择结构

if双分支处理

if [条件测试];then
  命令序列xx
else
  命令序列yy
fi

if多分支处理

if [条件测试1];then
   命令序列xx
elif [条件测试2];then
   命令序列yy
elif [条件测试3];then
   命令序列hh

else
   命令序列zz
fi

for循环结构,解决重复性的操作

? 遍历/列表式循环
   – 根据变量的不同取值,重复执行xx处理
for 变量名   in   值列表
do
    反复执行的代码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读