linux计算机基础之engineer DAY02

Posted mrmeng123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux计算机基础之engineer DAY02相关的知识,希望对你有一定的参考价值。

Shell脚本
    脚本:一个可以运行的文件,可实现某种功能

案例1:第一个Shell脚本
[[email protected] ~]# vim /root/hello.sh
echo hello world
[[email protected] ~]# chmod  +x  /root/hello.sh       #赋予执行权限
[[email protected] ~]# /root/hello.sh                         #绝对路径执行
 
规范Shell脚本的一般组成
? #! 环境声明(以下所有代码,有什么程序执行翻译)
? # 注释文本
? 可执行代码
案例1:第一个Shell脚本
[[email protected] ~]# cat /root/hello.sh
 #!/bin/bash
 echo hello world
 cat /etc/redhat-release
 uname -r
 hostname
 ifconfig | head -2
[[email protected] ~]# chmod  +x  /root/hello.sh
[[email protected] ~]# /root/hello.sh   #绝对路径执行
 

重定向输出
      >   :只收集前面命令正确输出结果
      2> :只收集前面命令错误输出结果
      &> :收集前面命令,正确与错误输出结果
]# echo 123 > /opt/1.txt   
]# cat /opt/1.txt
]# cat /opt/a
]# cat /opt/1.txt /opt/a
]# cat /opt/1.txt /opt/a  >    /mnt/nsd.txt
]# cat /mnt/nsd.txt
]# cat /opt/1.txt /opt/a  2>    /mnt/nsd.txt
]# cat /mnt/nsd.txt
]# cat /opt/1.txt /opt/a  &>    /mnt/nsd.txt
]# cat /mnt/nsd.txt
###############################################
案例3:书写一个可以创建用户的脚本
        /dev/null:黑洞设备
[[email protected] ~]# vim /root/user.sh
 #!/bin/bash
 useradd nsd04  &>  /dev/null
 echo 用户nsd04创建成功
 echo 123  |  passwd  --stdin  nsd04  &> /dev/null
 echo 用户nsd04密码设置成功
[[email protected] ~]# /root/user.sh
 为了增加脚本灵活性,以及适应多变的需求所以使用变量
 变量:会变化的量     类似于容器,以不变的名称,存储可以变化的值
            – 方便以固定名称重复使用某个值
  变量名=值
[[email protected] ~]# vim /root/user.sh
  #!/bin/bash
  a=zhangsan                 #定义变量a储存值zhangsan
  useradd $a &> /dev/null    #$a使用变量a储存的值
  echo 用户$a创建成功
  echo 123 | passwd --stdin $a &> /dev/null
  echo 用户$a密码设置成功
[[email protected] ~]# /root/user.sh

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

? 基本格式
引用变量值:$变量名
– 查看变量值:echo $变量名、echo ${变量名}
[[email protected] ~]# a=rhel
[[email protected] ~]# echo $a
rhel
[[email protected] ~]# echo ${a}
rhel
[[email protected] ~]# echo $a7
[[email protected] ~]# echo ${a}7
rhel7
[[email protected] ~]#
############################################
   ‘  ‘:取消所有特殊意义字符,变为普通字符
  $(  )  或  反撇号 `  ` : 将命令的输出,作为参数直接参与下一条命令
[[email protected] ~]# rm -rf /opt/*
[[email protected] ~]# date +%F
[[email protected] opt]# cd  /opt
[[email protected] opt]# mkdir `date +%F`
[[email protected] opt]# ls
[[email protected] opt]# mkdir mysql-`date +%F`
[[email protected] opt]# ls
[[email protected] opt]# mkdir `hostname`
[[email protected] opt]# ls
[[email protected] opt]# mkdir  nsd-$(date +%F)
[[email protected] opt]# ls
################################################
环境变量:变量名一般都大写,由系统定义完成,并且赋值完成
   USER=当前登陆系统的用户名
[[email protected] /]# echo  $USER
root
[[email protected] /]# su - nsd01
[[email protected] ~]$ echo $USER
nsd01
[[email protected] ~]$ exit
logout
[[email protected] /]# su - student
[[email protected] ~]$ echo $USER
student
[[email protected] ~]$ exit
logout
[[email protected] /]#

位置变量:由系统定义完成,并且赋值完成
? 在执行脚本时,提供的命令行参数
– 表示为 $n,n为序号
– $1、$2、.. .. ${10}、${11}、.. ..
[[email protected] /]# vim /root/user.sh
 #!/bin/bash
 useradd $1 &> /dev/null
 echo 用户$1创建成功
 echo 123 | passwd --stdin $1 &> /dev/null
 echo 用户$1密码设置成功
[[email protected] /]# /root/user.sh   zhangsan
[[email protected] /]# /root/user.sh   tom
[[email protected] /]# /root/user.sh   harry
[[email protected] /]# vim  /root/1.sh
 #!/bin/bash
 cat -n $1  |  head -$2
 echo 显示$1文件的头$2行
[[email protected] /]# /root/1.sh  /etc/passwd  4

################################################
  让用户体验更好,降低脚本使用难度,让脚本运行产生交互
    read :
                 1.产生交互,会等待用户输入内容
                 2.记录用户在键盘上的输入
                 3.将用户在键盘上的输入,赋值给变量储存
     -p  ‘屏幕输出信息‘
[[email protected] /]# vim /root/user.sh
 #!/bin/bash
 read -p  ‘请输入您要创建的用户名:‘    a
 useradd  $a  &> /dev/null
 echo  用户$a创建成功
 echo  123 |  passwd  --stdin  $a &> /dev/null
 echo  用户$a密码设置成功
[[email protected] /]#
#################################################
预定义变量:由系统定义完成,并且赋值完成
 $#   已加载的位置变量的个数(统计一共输入多少个位置变量)
 $*   输出所有位置变量的值
 $?   程序退出后的状态值,0表示正常,其他值异常
[[email protected] /]# cat /root/2.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $#      统计一共输入了多少个位置变量的值
echo $*      输出所有位置变量的值
[[email protected] /]# /root/2.sh
[[email protected] /]# /root/2.sh  dc tc dz tz
 
[[email protected] /]# useradd natasha
[[email protected] /]# echo $?         #为0代表上条命令成功
[[email protected] /]# useradd natasha
[[email protected] /]# echo $?         #非0值代表上条命令失败
[[email protected] /]# id natasha
uid=1016(natasha) gid=1016(natasha) 组=1016(natasha)
[[email protected] /]# echo $?      #为0代表上条命令成功
0
[[email protected] /]# id hahaxixi
id: hahaxixi: no such user
[[email protected] /]# echo $?      #非0值代表上条命令失败
1
 
#################################################
条件测试及选择
    [  测试表达式  ]    每一部分之间都要有空格
 -r:文档存在,且对文档具备读取权限为真
 -w:文档存在,且对文档具备写权限为真
 -x:文档存在,且对文档具备执行权限为真
? 检查文件状态                        
 -e:文档存在为真
 -d:文档存在,且为目录为真
 -f:文档存在,且为文件为真
[[email protected] /]# [ -f /etc/passwd ]
[[email protected] /]# echo $?
[[email protected] /]# [ -f /etc/ ]
[[email protected] /]# echo $?
[[email protected] /]# [ -d /etc/passwd ]
[[email protected] /]# echo $?
[[email protected] /]# [ -d /etc/]
[[email protected] /]# echo $?
? 比较整数大小
  -gt:大于 #greater than
  -ge:大于等于 greater equal
  -eq:等于     equal
  -ne:不等于 no equal
  -le:小于等于 little equal
  -lt:小于         little
[[email protected] /]# [ 1 -eq 1 ]
[[email protected] /]# echo $?
[[email protected] /]# [ 1 -ge 1 ]
[[email protected] /]# echo $?
[[email protected] /]# [ 1 -gt 1 ]
[[email protected] /]# echo $?

? 字符串比对
     == :相等一致为真
     != :不相等为真
[[email protected] /]# [ student == root ]
[[email protected] /]# echo $?
1
[[email protected] /]# [ student != root ]
[[email protected] /]# echo $?
0
[[email protected] /]# [ $USER == root ]
[[email protected] /]# echo $?
0
[[email protected] /]#

#############################################
if双分支处理
   if  [条件测试];then
           命令序列xx
   else
           命令序列yy
   fi
[[email protected] /]# vim /root/if01.sh
 #!/bin/bash
 if  [  $1  -eq  2  ];then
   echo hello
 else
   echo hi
 fi
[[email protected] /]# /root/if01.sh  1
[[email protected] /]# /root/if01.sh  2
[[email protected] /]# cat /root/if02.sh
 #!/bin/bash
 if  [ $# -eq 0 ];then
   echo 您没有输入任何的命令行参数
 else
   echo 您输入了命令行参数
   echo 您一共输入了$#个参数
   echo 它们的值为$*
 fi
[[email protected] /]# /root/if02.sh
[[email protected] /]# /root/if02.sh dc tc dz tz

if多分支处理
 if [条件测试1];then
    命令序列xx
 elif [条件测试2];then
    命令序列yy
 elif [条件测试3];then
    命令序列aa
         ..........
 else
    命令序列zz
 fi

案例:书写一个成绩脚本
 
    用户输入考试成绩,利用 read -p 手法进行获得用户成绩
    如果成绩 大于等于 90 ,则输出 优秀
    如果成绩 大于等于 80 ,则输出 良好
    如果成绩 大于等于 70 ,则输出 一般
    如果成绩 大于等于 60 ,则输出 合格
    如果以上条件均不满足,则输出 再牛的肖邦也弹不出哥的悲伤!
[[email protected] /]# vim /root/if04.sh
 #!/bin/bash
 read  -p   ‘请输入您的成绩:‘    num
 if [  $num  -ge  90  ];then
   echo 优秀
 elif  [  $num  -ge  80  ];then
   echo 良好
 elif  [  $num  -ge  70  ];then
   echo 一般
 elif  [  $num  -ge  60  ];then
   echo 合格
 else
   echo ‘再牛的肖邦,也弹不出哥的悲伤!‘
 fi
[[email protected] /]# /root/if04.sh
#########################################
for循环结构
 for 变量名   in 值列表
 do
      命令序列
 done

[[email protected] /]# vim /root/for01.sh
 #!/bin/bash
 for  a  in  zhangsan lisi wangwu dc tc dz tz
 do
  useradd  $a   &> /dev/null
  echo  $a创建成功
 done
[[email protected] /]# /root/for01.sh

   创建用户  nsd1~nsd50
   造数工具: {起始点..结束点}     {1..50}
[[email protected] /]# rm -rf /opt/*
[[email protected] /]# touch /opt/nsd{1..10}.txt
[[email protected] /]# ls /opt/
[[email protected] /]# cat /root/for01.sh
 #!/bin/bash
 for a in {1..50}
 do
   useradd nsd$a   &> /dev/null
   echo nsd$a创建成功
 done
[[email protected] /]#
#################################################
案例:书写一个判断IP通信的脚本
  用户输入IP地址,利用read -p 方式获得用户输入的IP地址
 
  判断如果本机可以与该IP地址通信,则输出 可以通信
  判断如果本机不可以与该IP地址通信,则输出 无法可以通信
[[email protected] /]# vim /root/ip.sh
 #!/bin/bash
 read  -p  ‘请输入您要测试的IP地址:‘    ip
 ping  -c  2   $ip  &>  /dev/null
 if  [  $?  -eq  0  ];then
  echo  $ip可以通信
 else
  echo  $ip无法通信
 fi
[[email protected] /]#

###########################################
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

























































































































































































































































以上是关于linux计算机基础之engineer DAY02的主要内容,如果未能解决你的问题,请参考以下文章

Day02_操作系统网络及Linux基础

linux-engineer-管理员技术-02:邮件服务器,数据库服务基础

达内-linux基础-day02

linux基础day06:文件管理02

linux基础day04:bash初识02

008day--linux 基础之网络配置和ssh服务