Shell脚本基础、使用变量、条件测试及选择、列表式循环

Shell语言

脚本:可以运行,一个文件,可以实现某种功能(命令的堆积)

[[email protected] ~]# vim /root/stu.sh

echo hello world
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2

[[email protected] ~]# chmod +x /root/stu.sh

[[email protected] ~]# /root/stu.sh

案例1:书写一个创建用户的脚本

[[email protected] ~]# vim /root/user.sh

useradd nsd02
echo 123 | passwd --stdin nsd02

[[email protected] ~]# chmod +x /root/user.sh

[[email protected] ~]# /root/user.sh

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

规范Shell脚本的一般组成
? #! 环境声明(下面所有的语句解释程序)
? # 注释文本
? 可执行代码

管道传递
? 使用 | 管道操作
– 将前一条命令的标准输出交给后一条命令处理

重定向输出

: 只收集前面命令的正确输出
2> : 只收集前面命令的错误输出
&> : 前面命令正确与错误输出

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

[[email protected] ~]# cat /opt/1.txt /etc/

[[email protected] ~]# cat /opt/1.txt /etc/ > /opt/a.txt
[[email protected] ~]# cat /opt/a.txt

[[email protected] ~]# cat /opt/1.txt /etc/ 2> /opt/a.txt
[[email protected] ~]# cat /opt/a.txt

[[email protected] ~]# cat /opt/1.txt /etc/ &> /opt/a.txt
[[email protected] ~]# cat /opt/a.txt

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

/dev/null : 黑洞设备

案例2:创建用户设置密码

[[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] ~]# chmod +x /root/user.sh

[[email protected] ~]# /root/user.sh

让脚本适用多变的环境

变量 : 容器 以不变名称,存放可以变化的值

[[email protected] ~]# vim /root/user.sh
#!/bin/bash
user=natasha
useradd $user &> /dev/null
echo 用户$user创建成功
echo 123 | passwd --stdin $user &> /dev/null
echo 用户$user密码设置成功

[[email protected] ~]# /root/user.sh

为变量赋值:

   变量名=值
read  为变量赋值,读入用户在键盘上的输入,将用户在键盘上的输入赋值给变量

[[email protected] ~]# cat /root/user.sh
#!/bin/bash
read -p ‘请输入您要创建的用户:‘ user
useradd $user &> /dev/null
echo 用户$user创建成功
echo 123 | passwd --stdin $user &> /dev/null
echo 用户$user密码设置成功

[[email protected] ~]#

[[email protected] ~]# cat /root/user.sh
#!/bin/bash
read -p ‘请输入您要创建的用户:‘ user
read -p ‘请输入您要设置的密码:‘ pass
useradd $user &> /dev/null
echo 用户$user创建成功
echo $pass | passwd --stdin $user &> /dev/null
echo 用户$user密码设置成功

###############################################################
? 以不变的名称存放的可能会变化的值
– 变量名=变量值
– 方便以固定名称重复使用某个值
– 提高对任务需求、运行环境变化的适应能力

变量名
– 等号两边不要有空格
– 变量名由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符

下列变量名中有效的shell变量名是( C )
A:-2-time B:_2$3 C:trust_no_1 D:2004file

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

[[email protected] ~]# echo $a
rhel
[[email protected] ~]# echo $a7

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

$[] : 代表运算

[[email protected] ~]# echo $[1+1]

[[email protected] ~]# echo $[2*3]

[[email protected] ~]# echo $[2-3]

[[email protected] ~]# echo $[10/2]

[[email protected] ~]# echo $[10%2] #取余数运算

[[email protected] ~]# echo $[10%3]

[[email protected] ~]# a=7
[[email protected] ~]# b=3

[[email protected] ~]# echo $[$a+$b]

$(  )与` `: 将命令输出结果,作为参数

[[email protected] opt]# date +%F

[[email protected] opt]# mkdir date +%F
[[email protected] opt]# ls

[[email protected] opt]# mkdir mariadb-date +%F
[[email protected] opt]# ls

[[email protected] opt]# mkdir hostname-date +%F
[[email protected] opt]# ls

 单引号‘ ‘ :  可以取消特殊字符的意义

生成随机数 $RANDOM

生成随机数 范围为 0~99 之间的随机数 $[$RANDOM%100]

生成随机数 范围为 0~9 之间的随机数 $[$RANDOM%10]

求余运算: 余数一定小于被除数

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

环境变量,由系统直接定义完成,赋值完成

? 常见的环境变量
USER : 当前登陆的系统身份

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

[[email protected] /]# vim /root/test02.sh

#!/bin/bash
cat -n $1 | head -$2

[[email protected] /]# /root/test02.sh /etc/passwd 4

预定义变量
? 用来保存脚本程序的执行信息

$#    已加载的位置变量的个数(计算使用位置变量的总数)
$*    所有位置变量的值
$?    程序退出后的状态值,0表示正常,其他值异常

[[email protected] /]# vim /root/test02.sh

#!/bin/bash
cat -n $1 | head -$2
echo $#
echo $*

[[email protected] /]# /root/test02.sh /etc/passwd 2

#############################################################
条件测试及选择

? 检查文件状态
-e : 存在 为真
-d : 存在且为目录 才为真
-f : 存在且为文件 才为真
-r : 存在且对于对象有读权限 才为真
-w : 存在且对于对象有写权限 才为真
-x : 存在且对于对象有执行权限 才为真

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

? 比较整数大小(带g都有大于二字,带e的都有等于二字,带l的都有小于二字)
-gt :大于
-ge :大于等于
-eq :等于
-ne :不等于
-lt :小于
-le :小于等于

[[email protected] /]# a=7
[[email protected] /]# b=3
[[email protected] /]# [ $a -ne $b ]
[[email protected] /]# echo $?
0
[[email protected] /]# [ $a -eq $b ]
[[email protected] /]# echo $?
1
[[email protected] /]# [ $a -ge $b ]
[[email protected] /]# echo $?
0
[[email protected] /]# [ $a -le $b ]
[[email protected] /]# echo $?
1

? 字符串比对
== : 字符串一致为真
!= : 字符串不一致为真

[[email protected] /]# [ $USER == root ]
[[email protected] /]# echo $?
0
[[email protected] /]# [ redhat == root ]
[[email protected] /]# echo $?
1
[[email protected] /]# [ redhat != root ]
[[email protected] /]# echo $?
0

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

if双分支处理

if [条件判断];then
命令序列01
else
命令序列02
fi

案例:
计算机随机产生一个0~9之间的数字
用户输入一个0~9之间的数字

如果 计算机随机产生的数字 与  用户输入的数字  相等
         则输出  恭喜您猜对啦
如果 计算机随机产生的数字 与  用户输入的数字  不相等
         则输出  再见

[[email protected] /]# vim /root/num.sh
#!/bin/bash
num1=$[$RANDOM%10]
read -p ‘请输入[0-9]之间的数字:‘ num2
if [ $num1 -eq $num2 ];then
echo 恭喜您猜对了
else
echo 再见
fi

if多分支处理

if [条件判断1];then
命令序列01
elif [条件判断2];then
命令序列02
elif [条件判断3];then
命令序列03
else
命令序列04
fi

案例:
判断用户输入成绩
如果 成绩大于等于90 则输出优秀
如果 成绩大于等于80 则输出良好
如果 成绩大于等于70 则输出及格
如果 成绩大于等于60 则输出仍需努力
以上条件均不满足 则输出 在牛的肖邦,也弹不出哥的悲伤

[[email protected] /]# cat /root/nsd.sh
#!/bin/bash
read -p ‘请输入您的成绩:‘ nsd

if  [ $nsd -ge 90 ];then
  echo 优秀
elif [ $nsd -ge 80 ];then
  echo 良好
elif [ $nsd -ge 70 ];then
  echo 及格
elif [ $nsd -ge 60 ];then
  echo 仍需努力
else
  echo 在牛的肖邦,也弹不出哥的悲伤
fi

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

案例:
计算机随机产生一个0~9之间的数字
用户输入一个0~9之间的数字

如果 计算机随机产生的数字 与  用户输入的数字  相等
         则输出  恭喜您猜对啦
如果 计算机随机产生的数字 与  用户输入的数字  不相等
如果猜大了 则输出大了
如果猜小了 则输出小了   

[[email protected] /]# cat /root/num.sh
#!/bin/bash
num1=$[$RANDOM%10]

read  -p  ‘请输入[0-9]之间的数字:‘    num2
if [ $num1 -eq $num2 ];then
   echo 恭喜您猜对了
    exit  #退出脚本
elif [ $num2 -gt $num1  ];then
   echo 您猜大了
else
   echo 您猜小了
fi

for循环结构

for 变量名 in 值列表
do
命令序列
done

for a in zhangsan lisi wangwu dc
do
useradd $a
done

变量a参与循环,变量a值影响循环的结果
[[email protected] /]# vim /root/for.sh
#!/bin/bash
for a in nsd11 nsd12 nsd13 nsd15
do
useradd $a
echo $a创建成功
done

变量a不参与循环,变量a值不影响循环的结果
#!/bin/bash
for a in 1 2 3
do

   echo  hello  world

done

[[email protected] /]# cat /root/num.sh
#!/bin/bash
num1=$[$RANDOM%10]
for a in {1..10}
do
read -p ‘请输入[0-9]之间的数字:‘ num2
if [ $num1 -eq $num2 ];then
echo 恭喜您猜对了
exit #exit退出整个脚本
elif [ $num2 -gt $num1 ];then
echo 您猜大了
else
echo 您猜小了
fi
done

原文地址:http://blog.51cto.com/13841846/2133956

时间: 2024-07-29 02:41:00

Shell脚本基础、使用变量、条件测试及选择、列表式循环的相关文章

shell脚本基础、变量

shell脚本基础 知识要点 掌握Shell脚本的基础知识 学会使用Shell变量 学会编写简单的Shell脚本 Shell脚本的应用环境 学习shell脚本的基本流程 看.想.写 shell脚本用在什么地方 编写常用系统维护工具菜单 重要的性能参数.进程和日志分析 自动实现数据备份计划 自动批量搭建特定系统环境 防火墙自动配置脚本 服务器的配置文件安全比对 对批量设备进行远程巡检 Shell脚本的组成元素 shell脚本的基本组成 声明和注释* 系统命令 文本处理工具(grep.cut.sed

bash脚本基础入门之条件测试

在运行bash命令的时候,无论成功还是失败都会返回为用户返回一个执行的结果,通常把他叫做退出状态码,每当我们运行命令的时候,退出状态码都会被记录在$?变量中,在命令行echo $?可以查看命令的执行结果,成功的值为0,失败的值为1-255之间的某个值. 注:在shell脚本中,退出状态码记录的是脚本最后一条命令,为方便检查脚本错误,可以使用exit #自定义退出状态码. shell结构化命令中,如if...then语句.while...do...done语句等的CONDITION条件都是以命令的

Shell脚本编程算术运算和条件测试

算术运算 1.bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方) 实现算术运算: (1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式)) (4) var=$(expr arg1 arg2 arg3 ...) (5) declare –ivar= 数值 (6) echo '算术表达式' | bc 2.乘法符号有些场景中需要转义,如* 3.bash有内建的随机数生成器: $RANDOM(0-32767)

shell条件测试,运算符,选择结构,for循环结构

一.shell条件测试      man bash  //查看帮助 条件测试的命令 test 选项 文件名或目录名 或 [ 选项 文件名或目录名 ] 例: [ -e /etc/passd ] 文件状态 -f              //判断是不是文件,是文件为真 -d //判断是不是目录,是目录为真 -e //判断是不是存在,存在为真 -r //判断是否可以阅读,可以阅读为真 -w //判断是否可写,可写为真 -x //判断是否可执行,可执行为真 -l //判断是否为链接,是链接为真 数值比较

linux学习18 shell脚本基础-bash变量和逻辑运行

一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:install,mktemp 二.bash特性及bash脚本编程初步 1.终端:附着在终端的接口程序 GUI:KDE,GNome,Xfce CLI:/etc/shells 2.bash的特性: a.命令行展开:~,{} b.命令别名:alias,unalias c.命令历史:history d.文件名通配

linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)

Shell 脚本基础 1.变量 什么是变量 #a=1 # echo $a 1 变量:可以变化的量 1.2变量名称注意事项 变量名不能以数字开头 不能与系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要使用"_"下划线开头 最好做到见名知意 不能使用程序中的保留字,列如if,for等 1.3变量类型 字符型 数值型 整型浮点型 布尔型 条件是和否 #$echo $a 引用 abc 撤销 unset +(变量名)a 1.4变量操作 * 设置变量 * 引用变量 * 撤销变量 单引号和双

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

第一章、shell脚本基础

shell的作用:人和机器交互的工具-->其实是一个程序. shell里比较好用的程序是bash 默认情况下几乎所有的linux系统默认的shell都是bash ==== c语言为什么要编译.c语言是人认识的语言,根据某种编码进行翻译叫编译. shell脚本编程的优势. 查看当前shell [[email protected] ~]$ echo $SHELL /bin/bash [[email protected] ~]$  shell课程体系 Shell脚本编程 Shell基础 变量的使用 算

Linux运维之道之ENGINEER1.4(shell脚本基础)

ENGINEER1.4 SHELL脚本基础 认识shell环境 bash shell的使用方式 交互式: --人工干预,智能化程度高 --逐条解释执行,效率低 非交互式: --需要提前设计,智能化难度大: --批量执行,效率高: --方便在后台及悄悄地执行: 什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件 --解释型程序 --顺序,批量执行 规范shell脚本的一般组成: #!环境声明 #注释文本 可执行代码 ----------------------------------