linux-shell脚本编程-变量-算术表达式-判断语句-if分支语句

bash工作特性:
    1.支持命令历史、命令补全
    2.支持管道、重定向
    3.支持命令别名
    4.支持命令行编辑
    5.支持命令行展开 
    6.支持文件名通配
    7.支持使用变量
    8.支持编程
命令编辑:
光标跳转:ctrl+a:跳到命令行首  home
            ctrl+e:跳到命令行尾  end
            ctrl+u:删除光标至命令行首的内容
            ctrl+k:删除光标至命令行尾的内容
             ctrl+l:清屏  clear
命令历史:bash会自动记录过去曾经执行过的命令,会保存到内存缓存中
          ↑或者history
            history  -w:将缓存中的命令历史保存到历史文件中.bash_history
            history  -c:清空命令历史
    命令历史的使用技巧:
        !n:执行命令历史中第N条命令
        !-n:执行命令历史中倒数第N条命令
        !!:执行上一条命令
        !string:执行命令历史中最近的一个以指定字符串开头的命令
        !$:引用前一个命令的最后一个参数
        先按esc松开再按。(点)
        一起按alt+。(点)

bash支持的引号:
` `:命令替换
" ":弱引用,可以实现变量替换
‘ ‘:强引用,不可以实现变量替换

文件名通配:
*:匹配任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意字符
[a-z]  [a-zA-Z] [a-z0-9]
[^]:匹配指定范围之外的任意字符
[^0-9]

shell 基本语法
变量
表达式
判断语句
if表达式

shell基础:
#!/bin/bash   -->shbang-解释shell的绝对路径
作用:显示后期命令以哪种shell来执行这些
     命令。如不指shell,以当前shell作为执行的shell
两种注释:
#
;
shell程序一般以sh结尾

创建执行shell程序的步骤
    第一步:创建一个包含命令和控制结构的shell文件。
    第二步:修改这个文件的权限使它可以执行。
            使用chmod u+x
     第三步:执行
        方法1:[[email protected] shell]# ./expr.sh
        方法2:使用绝对路径 [[email protected] ~]# /root/shell/expr.sh
        方法3:[[email protected] ~]# bash /root/shell/expr.sh
        方法1,2需要给x权限,方法3不用,直接bash

=======================================================================
shell变量-->内存空间,命名
    变量是shell 传递数据的一种方法。变量是用来代表每个值的符号名。
    Shell 有两类变量:临时变量和永久变量。
        临时变量:是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。
        永久变量:是环境变量,其值不随shell 脚本的执行结束而消失。
=======================================================================================
   变量命名规则:
    1.只能包含字母,数字和下划线,并且不能数字开头
    2.不应跟系统中已有的环境变量重名
    3.见名知意
    环境变量
        定义:作用域为当前shell进程及其子进程
        查看环境变量:
            echo $PATH
            env
            用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找。
            export VARNAME=VALUE
                    脚本在执行时会启动一个子shell进程
                     命令行中启动的脚本会继承当前shell环境变量
                    系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量

用户定义变量-->本地变量
        set VARNAME=VALUE:作用域整个bash进程
        由字母或下划线打头。 由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制
    ?使用变量值时,要在变量名前加上前缀 "$”
  
    局部变量:
        local VARNAME=VALUE :作用域为当前代码段
        变量赋值:赋值号“=”两边应没有空格。
            [[email protected] ~]# A=`date`
            [[email protected] ~]# echo $A
            Fri Apr 24 17:18:46 CST 2015

PATH=$PATH:.  当前路径添加进环境变量--不安全

[[email protected] ~]# P=${PATH} 把PATH变量值赋给P
          [[email protected] ~]# echo $P

[[email protected] ~]# T=$(date) 命令--动作
          [[email protected] ~]# T=`date`   同上
          [[email protected] ~]# echo $T
    
     脚本里面的执行结果传不到外面,是独立
     脚本执行时新建了个子shell ,独立

可以利用变量和其它字符组成一个新的字符串。
            [[email protected] ~]# MYDIR=/home/test01
            [[email protected] ~]# echo "$MYDIR/ttt"
            /home/test01/ttt
            [[email protected] ~]# echo Today is $DAYday
            Today is
            [[email protected] ~]# echo Today is $DAY day
            Today is mon day
            [[email protected] ~]# echo Today is ${DAY}day
            Today is monday

列出所有的变量:
            set 命令
                [[email protected] ~]# set | grep DAY
                DAY=mon
       
        给变量赋值多个单词:
            [[email protected] ~]# NAME="hh-ll"
            [[email protected] ~]# echo $NAME
            hh-ll

[[email protected] ~]# NAME=‘gg kk‘
            [[email protected] ~]# echo $NAME
            gg kk

[[email protected] ~]# NAME="jj uu $NAME"
            [[email protected] ~]# echo $NAME
            jj uu hh ll
           
            [[email protected] ~]# NAME=‘jj uu $NAME‘
            [[email protected] ~]# echo $NAME
            jj uu $NAME

单引号和双引号的区别:
         单引号之间的内容原封不动地指定给了变量。
         双引号取消了空格的作用,特殊符号的含义保留。
    
   
     位置变量:Shell解释执行用户的命令时,
                将命令行的第一个字作为命令名,而其它字作为参数
                。由出现在命令行上的位置确定的参数称为位置参数。 
             位置变量:使用$N 来表示
            $1,$2,....
                [[email protected] test]# ./example.sh file1 file2 file3
                $0 这个程序的文件名 example.sh
                $n 这个程序的第n个参数值,n=1..N
               
   
    特殊变量:
        有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读
        的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,
        以下是一些等殊变量:
            $?:上一个命令执行状态返回值:
                         程序执行后,可能有两类返回值
                            程序的执行结果
                                     程序状态返回代码(0-255)
                                         0:正确执行
                                        1-255:错误执行。1,2,127系统预
            $*    这个程序的所有参数
            $#    这个程序的参数个数
            $$    这个程序的PID
            $!    执行上一个后台程序的PID
            [email protected]:   这个程序的参数列表
   
    引用变量:${VARNAME} {}有时可省略
    撤销变量:
        unset VARNAME
    查看当前shell中变量
        set
    查看当前shell中的环境变量
        printenv
        env
        eport
                 特殊变量,位置变量没法查看
===========================================================================   
    Read命令:
         作用:从键盘读入数据,赋给变量
            [[email protected] ~]# read a b c
            8 9 12
            [[email protected] ~]# echo $a $b $c
            8 9 12
        在shell脚本中使用
     [[email protected] ~]# read a b
     1 2 3
     You have new mail in /var/spool/mail/root
     [[email protected] ~]# echo $b
     2 3
    
     [[email protected] ~]# read a b c
     1 2
     [[email protected] ~]# echo $c

expr 命令
        作用:Shell变量的算术运算:
       expr命令:对整数型变量进行算术运算
        语法: expr  表达式    #注意 运算符之间要有空格
            +: expr 3 + 5
            -:expr $var1 - 5
            *:expr $var1 \* $var2
            / :expr $var1 / $var2
                复杂的运算:
                    var4=8
                     expr `expr 5 + 11` / $var4

bash中如何实现条件判断?
条件测试类型:

整数测试

字符测试

文件测试
条件测试的表达式:

[ expression ]

[ [ expression ]
           
   
整数比较:

-eq:测试两个整数是否相等
          $A -eq $B
          echo $?
          0 or 1
     -ne:测试两个整数是否不等:不等为真,相等为假
     -gt:测试一个数是否大于另一个数:大于为真
     -lt:测试一个数是否小于另一个数:小于为真
     -ge:大于或等于
     -le:小于或等于

字符串测试:
     ==:等值比较,等为真
     !=:不等比较,不等为真
     >:大
     <:小
     -n string 测试指定字符串是否为空,空则真,不空则假
     -s string 测试指定字符串是否不空,不空则真,空则假

文件测试:

-e FILE :文件是否存在
     -f FILE : 测试文件是否为普通文件
     -d FILE : 测试指定路径是否为目录
     -r FILE :测试当前用户对指定文件是否有读权限
     -w FILE :.............................写权限
     -x FILE:..........................执行权限
    -s FILE:测试文件是否为空

命令间的逻辑关系

逻辑与:&&或-a
          第一个条件为假时,第二个条件不用再判断,最终结果已经有;
          第一个条件为真时,第二个条件必须再判断
          id ylion &> /dev/null && echo "hello ylion
          ! id user1 && useradd user1
     逻辑或:||或-o
         逻辑或 。 两个条件有一个成立 ,结果为真
         id user1 || useradd user1

非:!
        取反
   
===============================================================
流程控制
    顺序
    选择
    循环
   
选择结构之if语句

单分支if语句
    if 判断条件; then
        statement1
        statement2
       
        .........
    fi

双分支if语句
    if 判断条件; then
         statement1
         statement2

....
    else
         statement3
         statement4
         ....

fi
        
多分支if语句:

if 判断条件1; then
         statement1
         ....

elif 判断条件2; then
         statement2
         .....

elif 判断条件3; then
     statement3
     .....

else
         statement4
        ......

fi

shell中如何进行算术运算
    1.let 算术运算表达式
         let c=$a+$b
         echo $c
    2.$[算术运算表达式]
         c=$[$a+$b]
    3.$((算术运算表达式))
         c=$(($a+$b))
    4.expr 算术运算表达式 表达式中各操作数及运算符之间要有空格,而且使用命令引用
         c=`expr $a + $b `

定义脚本退出状态码
    exit:退出脚本
    定义脚本执行状态结果
    exit # 0-255
    如果脚本没有明确定义退出状态码。那么最好执行的一条命令的退出码即为脚本退出状态码

1.精确找出有效的IP地址

2.写一个脚本,完成以下要求
(1)添加3个用户test1、test2、test3,并设置密码。但要先判断用户是否存在,不存在则添加
(2)显示当前系统共有多少个用户

3.写一个脚本,完成以下要求
指定一个存在的用户,自己用变量保存
(1)如果其UID为0,则显示此用户为管理员
(2)否则,就显示其为普通用户

时间: 2024-10-05 22:12:44

linux-shell脚本编程-变量-算术表达式-判断语句-if分支语句的相关文章

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

Linux Shell脚本编程while语句

Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存到文件,在后台执行,然后用tail -f监控文件变化[email protected]:~/linux/shell/flow_control$ sh while.sh &[1] 12867 #!/bin/bash while truedo    uptime >> log.txt    s

Linux shell脚本编程基础之练习篇

shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash if [ $# -ne 1 ] then echo "请输入一个参数" exit else echo "参数正确" newfile=$1 fi #echo `grep "^#\!" ${newfile}` if ! grep "^#\!" ${newfile} &>/

Linux shell脚本编程详解及应用实例

什么是shell脚本? 1.shell脚本:是一种解释型语言,不需要提前进行编译,只需将代码转化成中间代码,边解释边运行,执行效率稍逊于编译型语言,跨平台性好.而编译型语言则需要提前进行编译转化为二进制文件,靠近底层硬件执行效率高,可移植性差. 2.shell的首行严格来说使用shebang机制:由#和!构成的字符序列,在类unix系统中程序的载入器将其后的内容,当做解释器的指令,并将载有shebang文件路径作为解释器的参数,且予以调用. shell及其他解释型语言的一般格式?  #!/bin

Bash Shell脚本编程-变量知识

Shell:GUI  CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 路径补全:TAB键 管道:| 输入输出重定向:>    >> 提供编程环境: bash自动运行脚本机制 面向过程(以指令为中心组织数据)的编程模型 脚本编程 输入指令解决问题 程序是语句和表达式组成的 运行时根据一定流程来执行: 顺序执行 选择执行 循环执行 程序是指令+数据的 面向对象(

Linux shell脚本编程

shell脚本 shell为非类型的解释型语言,即给变量赋值时就已为其定义. #!/bin/bash //环境说明 - chmod o+x 文件名 //命令行运行 /bin/bash 文件名 //同上作用 $变量名 //引用变量 $0 //当前程序的名称(系统早先定义) $n //第n个参数 $* //全部参数 $PWD //当前所在的目录 -f //文件是否存在 -d //目录是否存在 -s //检查文件是否为空(比较成功时表示含有数据:通常在删除文件时使用) -nt:-ot //比较一个文件

Linux 第九天: (08月11日) Linux Shell脚本编程

Shell脚本是包含一些命令或声明, 并符合一定格式的文本文件格式要求 运行shebang机制#!/bin/bash bash -n /path/to/some_script  检测脚本中的语法错误bash -x /path/to/some_script  调试执行 bash中变量的种类本地变量 生效范围 当前shell进程, 对当前外进程, 包括子shell无效环境变量 生效范围 当前shell进程和子进程局部变量 生效范围 当前shell进程中某代码片段 通常指函数位置变量 $1 $2 让脚

Unix/Linux shell脚本编程学习--Shell Script II

Shell Script II 10.Shell echo命令 echo "OK!\n”   #显示换行 echo "It is a test" echo无拼接字符时后一般可以不使用”引号”,从上面可看出,双引号可有可无,单引号主要用在原样输出中. 显示结果重定向保存至文件: vim myfile 创建文件 echo "It is a test" > myfile cat myfile 查看文件内容 若需要原样输出字符串(不进行转义),请使用单引号.