if 单分支、双分支、多分支、嵌套if语句

for 列表表示

1、给出列表

2、{1..100}

3、命令引用:

1)$(ls DIR)

2)$(1 1 100)

4、glob

5、$*,$@

condition   
declare -i -r -x

readonly

export ,env

set,printenv,env,export,readonly -p

bash:过程式编程,为了完成更复杂的任务,支持顺序执行、选择执行、循环执行

顺序执行:从左而右,依次执行命令。

选择执行:依据condition(条件)的执行状态结果,选择执行不同的代码片段。

循环执行:依据condition(条件)的执行状态结果,决定是否进入循环。

condition:

ture: 表示条件状态结果为0

false: 表示条件执行状态结果非0

if

单分支、双分支、多分支、嵌套if语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1、单分支结构
if condition; then
    if-ture
fi
2、双分支结构
if condition; then
    if-ture
else
    if-false
fi
3、多分支结构
if condition; then
    if-ture
elif condition; then
    if-ture
elif condition; then
    if-ture
    ....
else
    all-false
fi
4、嵌套if语句
if condition; then
    if condition; then
        if-ture
    fi
fi
if condition; then
    if condition; then
        if-ture
    fi
else
    if condition; then
        if-ture
    fi   
fi

for

列表循环

格式

1
2
3
4
5
6
7
8
9
10
11
12
13
1、格式一
for 变量名 in 列表; do
    循环体
done
2、格式二
for 变量名 in 列表
do
    循环休
done
3、格式三,命令行中
for 变量名 in 列表; do 循环体; done

列表表示方法

1、给出列表

2、{首位..尾数} ,例如 1到100表示为" {1..100}"

3、命令引用:

1)$(ls DIR)

2)$(expr [首数 [步长]] 尾数),例如 1到100表示为"$(1 1 100)"

4、通配符, glob . 例如 /var目录下一级子目录中的所有文件和目录的绝对路径。/var/*

5、变量引用。 $* 向脚本传递的所有参数,整体。$@向脚本传递的所有参数,每个独立

脚本格式

1
2
3
4
#!/bin/bash
# Version: major.minor.release
# Author:
# Desc:

脚本语法检测

1
# bash -n file.sh

调试脚本

1
# bash -x file.sh

记录脚本退出状态码

1
INTEVAL=$? (变量引用实现赋值)

用户邮箱位置

1
/var/mail

定义变量的类型

1
整型: # declare -i var

定义变量

1
2
3
4
5
6
7
8
1、环境变量
# env var
# declare -x var
# export var
2、只读变量
# declare -r var
# readonly var

显示本地和环境变量

1
# set

显示环境变量

1
2
3
# export
# env
# printenv

显示只读变量

1
# readonly -p

示例一:交互式给出一个文件路径,判断文件的类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# Version: 0.0.1
# Author: Lcc.org
# Description:testing
read -t 5 -p 'Enter a file path: ' filename
if [ -z "$filename" ]; then
    echo "Enter a file path"
    exit 1
fi
if [ ! -e $filename ]; then
    echo "No such file."
    exit 2
fi
if [ -f $filename ]; then
    echo "Common file."
elif [ -h $filename ]; then
    echo "Symbolic file."
elif [ -d $filename ]; then
    echo "Directory."
else 
    echo "Other type."
fi

示例二:添加10个用户,user1 ,,....user10,密码同用户名(只有root能改密码)。

**只有root能修改密码**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
1、列表,直接给出
#!/bin/bash
# Version: 0.0.2
# Author: Lcc.org
# Description: add user
##避免执行命令的用户非root用户,非root用户是不能修改密码的。
if [ $UID -ne 0 ]; then
  echo "Only root."
  exit 1
fi
##以给出列表的方式,循环。当列表循环完毕时,循环结束
for in user1 user2 user3 user4 user5 user6 user7 user8 user9 user10; do
  ## 判断用户是否存在。
  if id $i &> /dev/nullthen
    ## 执行状态结果为0时,条件为真时,说明什么呢?
    echo "$i exist"
  else
        ## 用户不存在时,即可添加用户
    if useradd $i 2> /dev/nullthen
      ## 添加不成功时, 组合中,对命令或测试条件取反。
      echo "$i is outside the law"
    else
      ## 用户名,正常,能正常添加用户,则可以给其添加密码
          echo "$i" passwd --stdin $i > /dev/null 2>&1
          ## 数值测试添加密码的执行状态结果。
      if [ $? -ne 0 ]; then
        ## 结果不为0,表示执行不成功
        echo "password is not legal"
      fi
    fi
  fi
done
2、{1..10}
#!/bin/bash
# Version: 0.0.3
# Author: Lcc.org
# Description: {}表示列表
[ ! $UID -eq 0 ] && echo "Only root."  && exit 1
for in {1..10}
do
  id user$i &> /dev/null
  if [ $? -eq 0 ]; then
    echo "user$i exist"
  else
    useradd user$i 2> /dev/null
    [ $? -ne 0 ] && echo "UserName is not legal" && continue
    echo "user${i}" passwd --stdin user${i} &> /dev/null
    [ $? -ne 0 ] && echo "Password is not legal"
    echo "Add user user$i finished"
  fi
done
3、命令引用
#!/bin/bash
# Version: 0.0.4
# Author: Lcc.org
# Description:  $(seq 10)表示列表
[ ! $UID -eq 0 ] && echo "Only root."  && exit 1
for in $(seq 10)
do
  id user$i &> /dev/null
  if [ $? -eq 0 ]; then
    echo "user$i exist"
  else
    useradd user$i 2> /dev/null
    [ $? -ne 0 ] && echo "UserName is not legal" && continue
    echo "user${i}" passwd --stdin user${i} &> /dev/null
    [ $? -ne 0 ] && echo "Password is not legal"
    echo "Add user user$i finished"
  fi
done
4、特殊变量
#!/bin/bash
# Version: 0.0.5
# Author: Lcc.org
# Description: $*,$@表示列表
[ ! $UID -eq 0 ] && echo "Only root."  && exit 1
for in $*
do
  id $i &> /dev/null
  if [ $? -eq 0 ]; then
    echo "$i exist"
  else
    useradd $i 2> /dev/null
    [ $? -ne 0 ] && echo "UserName is not legal" && continue
    echo "${i}" passwd --stdin ${i} &> /dev/null
    [ $? -ne 0 ] && echo "Password is not legal"
    echo "Add user $i finished"
  fi
done

示例三:判断/var/目录下每个文件的类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
方法一
#!/bin/bash
# Version: 0.0.6
# Author: Lcc.org
# Description: file type
for in /var/*; do
  if [ -f $i ]; then
      echo "Common file."
  elif [ -L $i ]; then
      echo "Symbolic file."
  elif [ -d $i ]; then
      echo "Directory."
  else
    echo "Other type"
  fi
done
方法二:
#!/bin/bash
# Version: 0.0.7
# Author: Lcc.org
# Description: Galaxy 
cd /var
for in $(ls /var); do
  if [ -f $i ]; then
    echo "Common file."
  elif [ -L $i ]; then
    echo "Symbolic file."
  elif [ -d $i ]; then
    echo "Directory."
  else
    echo "Other type"
  fi
done
方法三:
#!/bin/bash
# Version: 0.0.8
# Author: Lcc.org
# Description: Add DIR
for in $(ls /var); do
    if [ -f /var/$i ]; then
        echo "Common file"
    elif [ -L /var/$i ]; then
        echo "Symbolic file"
    elif [ -d /var/$i ]; then
        echo "Directory"
    else
        echo "Other type"
    fi
done

示例四:tcp协议下处于ESTABLISH状态的有多少个,LiSTEN有多少个,有几种状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
方法一:
#!/bin/bash
# Version: 0.0.9
# Author: Lcc.org
# Description: statusTCP
declare -i listen=0
declare -i established=0
declare -i other=0
for in $(netstat -tan | grep '^tcp\>' tr -s ' ' cut -d' ' -f6); do
    if "$i" == "LISTEN" ]; then
        let listen++
    elif "$i" == "ESTABLISHED" ]; then
        let established++
    else
        let other++
    fi
done
echo -e "LISTEN statu: $listen\nESTABLISHED statu: $established\nOther status: $other\nTotal type: $(netstat -tan | grep '^tcp\>' | tr -s ' ' | cut -d' ' -f6 | sort -u | wc -l)"
方法二:
# netstat -tan | grep '^tcp\>' | awk -v FS=' ' '{ARRAY[$NF]++}END{for(i in ARRAY){print i,ARRAY[i]}}'
LISTEN 12
CLOSE_WAIT 1
ESTABLISHED 3

本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1955978,如需转载请自行联系原作者

Linux之bash脚本编程---if补充和for循环相关推荐

  1. Linux之bash脚本编程---选择执行

    编程风格 过程式编程,目的解决问题 指令组织数据,指令的堆砌 为了完成复杂的任务 顺序执行:遍历的方式执行,逐个运行 选择执行:有一种选择标准,结果只能有一种选择,只执行某些 代码片段 循环执行:对一 ...

  2. 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese

    <Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...

  3. bash脚本编程入门_Bash编程入门

    bash脚本编程入门 对Unix的最初希望之一是,它将使日常的计算机用户能够微调其计算机以适应其独特的工作风格. 在过去的几十年中,对计算机定制的期望已经降低,许多用户将他们收集的应用程序和网站视为他 ...

  4. linux 中输入bash,Linux上Bash Shell编程

    Linux下Bash Shell编程 Bash Shell Programming in Linux Linux下Bash Shell编程 Bash what? 进阶的内容是什么? Okay, I g ...

  5. Linux之shell脚本编程

    Linux之shell脚本编程 编程介绍 shell 介绍 shell 脚本编程介绍 shell脚本命令 shell 编程基础知识 编程介绍 计算机编程的本质:输入.运算.输出 编译型语言: 程序在执 ...

  6. Bash脚本编程之算术运算

    简介 Bash所支持的算术运算和C语言是一样的,这里指的是操作符(operator)以及它们的优先级(precedence).结合性(associativity)和值,详见Shell Arithmet ...

  7. linux的逻辑运算参数,Linux基础之bash脚本编程初级-逻辑运算与测试

    引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试又分:数值测试.字符串测试.文件测试. 组合测试则有 ...

  8. linux内核与bash脚本接囗,Bash脚本编程之脚本基础和bash配置文件

    脚本基础 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成机器可运行的二进制程序文件后,方可运行.例如C语言和Java语言. 解释运行:需要一个 ...

  9. linux bash脚本编程知识点

    bash变量类型: 环境变量 本地变量(局部变量) 位置变量 特殊变量 本地变量: set VARNAME=VALUE: 作用域为整个bash进程: 引用变量 $(varname) 局部变量: loc ...

最新文章

  1. 在基于Jetty Fast CGI Proxy和php-fpm下配置Discuz
  2. 关于.Net中Process和ProcessStartInfor的使用
  3. linux 文件名带特殊符号,Linux删除含有特殊符号文件名的文件
  4. 七种寻址方式(寄存器间接寻址方式)
  5. ————————————————————————动态规划——————————————————————1003——————————...
  6. SOA面向服务架构——SOA的概念
  7. 记录——《C Primer Plus (第五版)》第十一章编程练习第5-12题
  8. 小米速度!雷军再祭 All in AIoT 大招!
  9. SQL Bulk Insert
  10. Postgresql去掉某个字段多余的空格
  11. 【重识云原生】第六章容器基础6.4.10.5节——Statefulset原理剖析
  12. 计算机死机后 通过任务管理器关闭程序,电脑死机后,按哪个键结束程序
  13. java反射的优缺点_Java反射机制的优缺点
  14. Centos 修改镜像源为阿里云
  15. 透明位图Ron Gery Microsoft 网络开发技术小组
  16. 网站突然服务器到期,网站云服务器到期释放
  17. 程序员应了解的那些事(4)求递归算法的时间复杂度
  18. Unity数据持久化-Json
  19. 【赠书】熊德意老师的一部不止于技术的神经机器翻译“百科全书”
  20. php仿制网站,如何仿制网站(一模一样),制造后台管理系统CMS

热门文章

  1. ArcSegment对象
  2. 基础008_定浮点转化[floating point IP]
  3. 关联省份与学校的级联HTML,JS实现的省份级联实例代码
  4. pythonnamedtuple定义类型_python - namedtuple和可选关键字参数的默认值
  5. 计算机应用基础的题库,统考计算机应用基础题库
  6. ddddocr打包不成功解决办法
  7. Linux运行shell脚本出现出错,可能是环境编码不一致造成的。
  8. eclipse插件之——PropertiesEditor
  9. 机械原理c语言程序,c语言机械原理编程,连杆运动分析图线.docx
  10. kotlin和python哪个好_python替代品for一些java及kotlin功能(慎入啊慎入)