标签:shell
整数值比较
-eq 等于
-ne 不等于
-ge 大于或等于
-le 小于或等于
-gt 大于
-lt 小于
shell预定义变量 (/bin/bash自带的变量)
变量名 和 存储的值 都不可以修改
变量的值 是根据当前系统运行的环境 获取。
在写脚本时可以直接使用。
$0 当前所在的进程或脚本名
$$ 当前运行进程的PID号 kill -9 $$
touch $$.txt
$? 上一条命令执行后的返回状态
0 上条命令正确执行
非0 上条命令执行错误
$! 当前终端最近后台运行进程的pid 号
$# 脚本或函数 位置变量 的总个数
$* 脚本或函数所有 位置变量 的值
3 位置变量
$1 脚本或函数 第一个位置的参数的值
$2 脚本或函数 第2个位置的参数的值
export 把变量定义为全局变量,能在当前进程,和当前进程的子进程里使用。
vim /etc/profile
y=203
export y
export x=101
--------------------------------------------------------------------
条件判断 程序根据条件判断的结果去执行
条件判断的结果要么成立 要么不成立
对不同的对象做判断使用不同选项
判断命令 test 表达式
[ 表达式 ]
文件状态
-e
-d
-f
-x
-r
-w
test -d /etc
echo $?
字符比较
相等 =
不相等 !=
非空 -n "string"
空 -z "string"
逻辑比较 (2个或以上判断条件)
逻辑与 && 多个判断条件必须同时成立
逻辑或 || 多个判断条件只要有一个条件成立就可以
逻辑非 ! 取反
数值运算 (运算命令 表达式)
expr 表达式
let 表达式
$((表达式))
$[ 表达式]
+ - * /
% 取余(求模)
++ 自加运算 : 自己加1之后,把结果赋值给自己
-- 自减运算: 自己减1之后,把结果赋值给自己
$((运算表达式))
$[运算表达式]
[root@svr5 shell]# $((3+5))
bash: 8: command not found
[root@svr5 shell]# echo $((3+5))
8
[root@svr5 shell]# x=10
[root@svr5 shell]# echo $((x++))
10
[root@svr5 shell]# echo $x
11
[root@svr5 shell]# y=21
[root@svr5 shell]# echo $((++y))
22
[root@svr5 shell]# echo $y
22
使用bc 做小数运算
[root@svr5 shell]# x=10.2 y=12.2
[root@svr5 shell]#
[root@svr5 shell]# echo "$x+$y" | bc
22.4
[root@svr5 shell]# z=`echo "$x+$y" | bc`
[root@svr5 shell]# echo $z
22.4
[root@svr5 shell]#
[root@svr5 ~]# A=12.34
[root@svr5 ~]# echo "$A*56.789" | bc
700.776[root@svr5 ~]# echo "scale=4; $A*56.789; 5/3" | bc //多表达式
700.7762
1.6666
shell流程控制 ( if 结构 循环结构 分支结构)
控制脚本的执行过程
流程控制彼此可以互相嵌套使用,也可以自己嵌套自己
根据条件的条件判断结果执行
-----------------------------------------------------
if结构
单分支
if 条件判断;then
执行的代码
......
fi
if 条件判断
then
执行的代码
......
fi
----------------------------------------
双分支
if 条件判断;then
代码
......
else
代码
......
fi
--------------------------------------------------------------------
#!/bin/bash
read -p "请输入你要查找的用户名 " username
echo $username
if [ -n "$username" ];then
id $username &> /dev/null
if [ $? -eq 0 ];then
echo "用户已经存在"
else
#usd $username
useradd $username
echo $username | passwd --stdin $username &> /dev/null
fi
else
echo "你必须要输入检查的用户名"
fi
----------------------------------------
多分支
if 条件判断1;then
代码
.......
elif 条件判断2;then
代码
.......
elif 条件判断N;then
代码
.......
else
以上所有判断条件都不成立时执行的代码
fi
______________________________________________________________________
[ -e /media/cdrom ] || mkdir /media/cdrom
----------------------------------------------------------------------
vim ping.sh
#!/bin/bash
if [ -n "$1" ];then
ping -c 3 $1 &> /dev/null
if [ $? -eq 0 ];then
echo "主机 $1 在线"
else
echo "主机 $1 不在线"
fi
else
echo "执行脚本格式如下:"
echo "$0 ip地址"
fi
:wq
chmod +x ping.sh
./ping.sh 1.1.1.1
----------------------------------------------------------------------
根据输入的分数,判断成绩优劣
86~100 好
85-71 优秀
70-61 良好
60分 及格
小于60 补考
小于50分 留级
要考虑的问题:
不输入成绩怎么办?
成绩的分数范围只能在1-100之间 输人成绩时,超出成绩的访问怎么办?
输入的不是分数 是字母 怎么办?
----------------------------------------------------------------------
循环结构 (脚本中需要重复执行的代码,放在循环结构里执行)
添加100个系统用户
检查网段内不在线的主机192.168.1.0/24
$name
for 循环结构 (遍历数据)
for 变量名 in 值列表
do
循环体
done
for x in jim 120 lucy a
do
echo "plj"
done
造数工具 seq 15
seq 11 37
seq 10 2 28
{1..100}
{a..z}
--------------------------------------------------------------------
执行脚本是依次检查当前系统 这4个服务器的运行状态
httpd crond network atd
若服务没有运行 启动服务,若服务是运行着的,显示服务正则运行。
for sername in httpd crond network atd
do
service $sername status
done
标签:shell
原文地址:http://liangzai818.blog.51cto.com/10003446/1752210