简介:用户通过shell向计算机发送指令的,计算机通过shell给用户返回指令的执行结果
通过shell编程可以达到的效果:提高工作效率、可以实现自动化
需要学习的内容:Linux 、 shell的语法规范
编写shell的流程:
第一步:用vi/vim创建一个.sh的文件。
第二步:在文件中进行开发。
第三步:给文件赋予可执行权限。
第四步:执行脚本。
本地变量:
定义变量:Var_Name=”Value“ 变量名=“值” 。
引用变量: ${Var_Name}
撤销变量:unset Var_Name
局部变量: 定义:local Var_Name=”Value“。 在函数内部生效
环境变量:定义:export Var_Name=”Value“。 常用的环境变量:PS1、HOSTNAME、LANG
位置变量:主要用于向脚本中传递参数。 表示方法: $1,$2,$3...$n 举例说明:./2.sh 1 5 9(传入的数据)
特殊变量: $0 脚本自身名称 $? 上个命令的执行状态 $# 参数列表
变量命名要求: 只能使用数字、字母、下划线组成。 不能以数字开头。 不能使用程序中的关键字。
变量名的默认规则: 见明知意、 自定义变量小写、 换将变量大写。
补充环境变量:set命令可以显示当前系统上所有的变量。 export、env命令可以显示环境变量
bash条件判断基础
判断的作用:判断后续操作的前提条件是否满足;如果满足执行一种指令,不满足则执行另一种指令。
条件测试类型: 整形测试、字符测试、文件测试。
逻辑运算:
与运算 && 真&&真=真;真&&假=假;假&&假=假;假&&真=假
或运算 | | 真| |真=真 真 | |假=真 假 | | 真 = 真 假 | | 假 = 假
非运算 ! !真=假 !假=真
判断方式
1) est EXPRESSION 举例:test 2 -gt 1
2)[ EXPRESSION ] 举例:[ 2 -gt 1 ]
3) [[ EXPRESSION ]] 举例:[[ 2 gt 1 ]]
4) 用命令执行状态来作为判断条件
查看脚本的执行过程: bash -x 脚本
bash条件判断语法格式
if三种格式:
单分支 : if 条件;then 分支1 fi
双分支: if 条件;then 分支1 else 分支2 fi
多分支: if 条件;then 分支1 elif 条件;then 分支2 elif 条件;then 分支3.... elif 条件n; then 分支n else 分支 fi
练习题如下:
1)案例:90分成绩以上为 A;80分成绩以上为 B;70分成绩以上为 C; 60分成绩以上为 D;0分以上为 E。
答:
#!/bin/bashscore=$1if [ $score -gt 100 ];thenecho "pleas enter 0-100"elif [ $score -gt 90 ];thenecho "A"elif [ $score -gt 80 ];thenecho "B"elif [ $score -gt 70 ];thenecho "C"elif [ $score -gt 60 ];thenecho "D"else echo "E"fi
2)案例:让用户指定一个文件,判断:如果有空白行,就显示空白行数,没有则提示“no“
#!/bin/bashfile=$1lines=`grep "^$" $file | wc -l`if [ $lines -gt 0 ];thenechho $lines
elseecho "no"
fi
整形测试方法:整形测试通常都是二元测试,格式是:num1 oprand num.
操作符:
-gt:大于 -lt:小于 -ge:大于等于 -le:小于等于 -ne:不等于 -eq:等于
用户和脚本进行交互:
位置变量 red 命令: read -p "参数" 变量名
例:read -p "请输入第一个数字:" num1
3) 让用户通过键盘输入一个用户名 如果用户存在,就显示其用户的用户名和uid 否则,就显示用户不存在。
#!/bin/bash
read -p "enter a user name:" username
id -u $username &?》/dev/null
num=$?
if [ $num -eq 0 ];thenuid=`id -u $userName`echo "$userName is exists,uid is $uid"
elseecho "user is not exists"
fi
4)让用户通过键盘输入一个用户名,如果用户不存在就退出 如果用户的uid大于等于500,就说明是普通用户;输出”普通“ 否则,就说明这是管理员用户或系统用户。
方法一:
#!/bin/bash
read -p "enter a user name" name
id -u $name &>/dev/null
num=$?
if [ $num -eq 0 ];thenuid=`id -u $name`if [ $uid -gt 499 ];thenecho "putong"elseecho "xt"fi
elseecho "not exists"
fi
方法二:
#!/bin/bash
read -p "enter a user name" nameid -u $name &>/dev/null
num=$?
if [ $num -ne 0 ];thenecho "no"exit 0
fi
uid=`id -u $name`
if [ $uid -gt 499 ];thenecho "pt"
elseecho "xt"
fi
5)让用户通过键盘输入一个用户名,如果用户不存在就退出 如果其uid等于其gid,就说塔是个”good guy“ 否则就说明是”bad guy“。
#!/bin/bash
read -p "enter a user name" name
id -u $name &> /dev/null
num=$?
if [ $num -ne 0 ];thenecho "no"exit 0
fi
uid=`id -u $name`
gid=`id -g $name`
if [ $uid -eq $gid ];thenecho "good"
else echo "bad"
fi