shell知识
shell基本的语句
一:if语句
格式:
if [ #条件的判断 ];then
#执行的动作
fi
操作符
+ 加
- 减
* 乘
/ 除【取整数商】
% 余【取余数】
数值的比较
参数 | 说明 | 示例 | |
-eq | 等于则条件为真 | [ 1 -eq 10 ] | 假 |
-ne | 不等于则条件为真 | [ 1 -ne 10 ] | 真 |
-gt | 大于则条件为真 | [ 1 -gt 10 ] | 假 |
-lt | 小于则条件为真 | [ 1 -lt 10 ] | 真 |
-ge | 大于等于则条件为真 | [ 1 -ge 10 ] | 假 |
-le | 小于等于则条件为真 | [ 1 -le 10 ] | 真 |
二:case语句
格式:
case #变量 in
1)
;;
......
*)
esac
示例:脚本启动关闭重启nginx服务【判断服务是否存活,判断其pid文件,如果没有可以在手动的创建pid文件】
#!/usr/bin/bash
source /etc/init.d/functions
case $1 in
start)
if [ -f /var/run/nginx.pid ];then
echo "nginx服务已经启动"
exit
else
/usr/sbin/nginx
action "nginx服务启动" /bin/true
fi
;;
stop)
if [ -f /var/run/nginx.pid ];then
/usr/sbin/nginx -s stop
if [ $? -eq 0 ];then
action "nginx服务正在关闭。。。" /bin/false
else
action "nginx服务关闭失败。。。" /bin/false
fi
action "nginx服务正在关闭。。。" /bin/false
fi
;;
reload)
$0 stop
$0 start
;;
*)
echo "USSGE: $0 [ start|stop|reload ]"
esac
三:for语句
示例:根据手动输入用户的前缀与后缀进行创建用户
#!/usr/bin/bash
if [ ! $UID -eq 0 ] && [ ! $USER == “root” ];then
echo "无权限执行......"
exit
fi
read -p "请输入你要创建的用户前缀: " user_qz
if [ -z $user_qz ];then
echo "请输入有效的值....."
exit
fi
read -p "请输入你要创建的用户数量: " user_num
if [[ ! $user_num =~ ^[0-9]+$ ]];then
echo "请输入整数"
exit
fi
echo "你创建的用户是 ${user_qz}1 ..${user_qz}${user_num}"
read -p "你要创建的用户如下,你确定要创建吗?[ y/n ] " readly
case $readly in
y|yes|YES)
for i in $(seq $user_num)
do
user=${user_qz}${i}
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "useradd: user $user already exists"
else
useradd $user;echo $RANDOM|tee -a backup.txt|passwd --stdin $user &>/dev/null
echo "useradd: user $user add successfully."
fi
done
;;
n|no|NO)
;;
*)
echo "你想好了再创建......"
;;
esac
示例二:批量创建用户
#!/usr/bin/bash
for i in $(cat user.txt)
do
user=$(echo $i|awk -F ":" '{print $1}')
pass=$(echo $i|awk -F ":" '{print $2}')
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user 已存在"
else
useradd $user
echo "$pass" | passwd --stdin $user &>/dev/null
fi
done
四:while语句
示例:
#!/usr/bin/bash
i=1
j=10
while [ $i -lt 10 ]
do
sum=$(( $i + $j ))
echo $i + $j = $sum
let i--
let j++
done
#!/usr/bin/bash
while read line
do
id $line &>/dev/null
rc=$?
if [ $rc -eq 0 ];then
echo "$line 用户已经创建"
sleep 1
else
useradd $line;echo "123"|passwd --stdin $line &>/dev/null
echo "$line 用户创建成功"
sleep 1
fi
done<user.txt
五:函数【函数的传参与位置参数不同】
#!/usr/bin/bash
file=/etc/passwd
t_file(){
if [ -f $file ];then
return 20
else
return 30
fi
}
t_file
if [ $? -eq 20 ];then
echo "文件存在"
elif [ $? -eq 30 ];then
echo "文件不存在"
fi
六:数组【取值,累加,打印】
示例:
#!/usr/bin/bash
declare -A info_passwd
while read line
do
type=$(echo $line|awk -F ":" '{print $NF}')
let info_passwd[$type]++
done</etc/passwd
for i in ${!info_passwd[@]}
do
echo 索引的名称:$i 索引对应次数: ${info_passwd[$i]}
done
七:运算符
算术:expr 1 + 2 $[ 1 + 2 ]
布尔:
! 非运算,表达式为 true 则返回 false,否则返回 true。
-o 或运算,有一个表达式为 true 则返回 true。
-a 与运算,两个表达式都为 true 才返回 true。
逻辑:
&& 逻辑的 AND,和的意思
|| 逻辑的OR,或的意思
字符串:
= 检测两个字符串是否相等,相等返回 true
!= 检测两个字符串是否相等,不相等返回 true。
-z 检测字符串长度是否为0,为0返回 true。
-n 检测字符串长度是否为0,不为0返回 true
$a 检测字符串是否为空,不为空返回 true
shell知识的更多相关文章
- DBA需要掌握的shell知识
每个中高级DBA都需要掌握一些简单脚本的编写,这样才能从繁杂重复的基础维护工作中解脱出来,才能有时间去研究更有价值的技术.VBird在讲shell script的时候,给出了几个经典的小范例练习,对于 ...
- 每天一个shell知识--数组
1.shell中数组的定义: 数组名=(value value1 value2 ) 也可以单独的设定数组的分量: arrayL[0]=value arrayL[1]=value1 2.${arrayL ...
- 几个常用的linux快捷键和shell知识
1) !$ !$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串.如:你可能会这样: $mkdir mydir $mv mydir yourdir $cd y ...
- shell知识积累
Ubuntu下常用的快捷键:https://blog.csdn.net/u010771356/article/details/53543041 变量名和等号之间不能有空格,变量名中间不能有空格,可以使 ...
- 看懂shebang吧,只需一点点shell知识,从此再也不犯强迫症
Python2: 开启一个terminal,输入下面命令: yshuangj@ubuntu:~$ vim helloA.py 在vim编辑器中,进入编辑模式(按i),输入下面的代码,然后退出编辑模式( ...
- shell 知识
解压 tar.bz2文件 bunzip2 linux-2.6.13.tar.bz2 | tar xvf -
- Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程
Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...
- Android shell 下 busybox,clear,tcpdump、、众多命令的移植
http://my.oschina.net/mopidick/blog/167372 作为一名Android开发者,经常需要进入Android 的shell终端运行一些命令.但是我们发现Android ...
- 跟着老男孩一步步学习Shell高级编程实战
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...
随机推荐
- numpy-matrix 方法速查
->matrix.T transpose:返回矩阵的转置矩阵 matrix.H hermitian (conjugate) transpose:返回复数矩阵的共轭元素矩阵 matrix.I in ...
- Filter过滤器 不登陆无法访问其他页面
package com.cscy.Filter; import java.io.IOException; import javax.servlet.Filter; import javax.servl ...
- css中有三个显示和隐藏的单词比较常见,display visibility 和 overflow我们需要区分开来
display display 设置或检索对象是否及如何显示 display: none 隐藏对象与它相反的是display:block 除了转换为块级元素之外,同时还有显示元素的意思 特点: 隐藏之 ...
- Redis和Memchaed缓存数据查询
使用TreeNMS数据库管理工具 支持Redis和Memchaed并存同时管理维护,支持集群管理,减少运维成本,提高工作效率 自带环境,免安装.免布署,下载解压即可使用.适用于windows,Linu ...
- Linux之ansible 常用模块
目的 代码发布系统 代码发布:把本地的代码通过某些方式弄到线上,可以供别人访问 部署 前戏 ansible 批量在远程主机上执行命令 puppet ruby ansible saltstack pyt ...
- python 并发编程 操作系统 进程 并发.并行 及 同步/异步,阻塞/非阻塞
操作系统: 多道技术背景: 提高工作效率(充分利用IO阻塞的时间) 同时执行多个任务 多道技术 空间复用:充分的利用内存空间 时间复用:充分利用IO阻塞时间 分时系统: 并发:提高了程序的工作效率 两 ...
- springboot+dubbo+mybatis多模块项目invalid boundexception
invalid boundexception的原因大抵是因为mybatis扫描不到mapper映射文件(xml),无法将mapper接口类(java)中的接口与mapper映射器绑定起来.这可能是因为 ...
- layer is not defined
项目中使用layui中,引入新旧版本出现的一个问题. 使用console.log(layer) 打印出来的,显示使用的版本是1.8.0 但是页面中引入的layui有好几个.就是不使用最新的. /*这里 ...
- mysql 文件
慢查询日志 log_query_time 查询时间超过这个值则会出现在慢查询日志中,默认值是10 log_slow_queries 是否开启慢查询 log_queries_not_using_ind ...
- maven 实用的命令
查询某个pom的来源: com.taobao.langyan langyan-client 命令: mvn dependency:tree -Dverbose -Dincludes=com.aliba ...