Linux 下Shell的学习2
0. 查看帮助(比如内置功能)
man bash -->变量处理大全1.-计算变量长度的不同方法及不同方法的耗时对比
尽可能的用内置的命令处理,速度快
time for i in $(seq 1111);do count=${#char};done;
2.场景的变量数值计算
0.$(()) let expr bc $[]
1.(())的使用:只需要将特定的算术运算表达式用$(())括起 -->效率高
echo $((1+2*2*2*2)) -->17
==> ((a=1+2*2*2*2)) -->echo $a
==>b=$((1+2*2*2*2)) -->echo $b
$((6 > 4 )) && echo "YES"
注意:+ - * / % += -=
**为幂运算
a++:显输出,后自加
++a: 先自加,后输出
计算器: echo $(($1$2$3))
2.let命令的使用
let 赋值表达式
let a=9-8
let a=a+1
3.expr:一般用于整数,也可以验证扩展名
1.常规计算
expr 2 + 2 -->直接输出结果,但是注意运算符左右有空格
expr 2 \* 2 -->直接输出结果,特殊符号需要转义2.增量计数
i=0
i=`expr $i+1`
echo $i
expr $[$a+$b], $a,$b可以为整数值
expr $[2+3] -->不用添加空格,直接输出结果
expr $[2**3] -->不用转义,直接输出结果3.判断扩展名 expr String : REGEXP
if expr "hello.txt" : ".*\.txt" -->判断文件拓展名是否为.txt 注意空格
->为真,则输出 9 显示匹配后的字符数,包括.txt
->为假,则输出非 0
4.判断变量是否是整数
read -p "please input the num:" a
expr $a + 0 &>/dev/null && echo int || echo char
5.计算字符串长度
echo $(expr length "Hello World") --> 11 调用length函数
==> echo "Hello World"|wc -m --> 12 多计算了一个空格
==> char="Hello World";echo ${#char} --> 114.bc Unix下的计算器
1.用于计算
a=54
echo $a+5|bc -->输出59
echo 10.6+6|bc -->输出16.6 不用管空格限制
seq -s "+" 10|bc -->输出55
2.字符转换
echo "scale="
5.$[] 的使用
echo $[2+3]
==>echo $[ 3 + 2 ]
==>echo $((2+3))3.shell变量的输入
1.read
read [参数] [变量名]
p;prompt: 设置提醒
t: time : 超时时间
read -t 5 -p "Please input 2 number:" a b
==>echo -n "please input a num:"
read a b
2. 脚本里面直接定义,外部传入
a=$1
b=$24.条件测试
1.文件测试
test<条件表达式>
==> [条件表达式]
[[条件表达式]] -->扩展的1,
-->可以使用通配符进行模式匹配。&&,||,<,>可以应用双中括号[[]]中
-->但是单中括号[]有问题
注意:[[ -f $file && -f $f2 ]]
==> [ -f $file ] && [ -f $f ] -->推荐
test -f file && echo "this is file"||echo "this is not a file"
==>[ -f file ]&& echo "this is file"||echo "this is not a file"
==>[[ -f file && -d folder ]] && echo "this is file"||echo "this is not a file"
test ! -f file && echo "this is file"||echo "this is not a file"
==>[ ! -f file ]&& echo "this is file"||echo "this is not a file"
==>[[ ! -f file && ! -d folder ]] && echo "this is file"||echo "this is not a file"2.文件测试操作符 -->更多可以man test学习
-d 文件存在,且为目录文件 dounent
-f 文件存在,且为普通文件 file
-s: 文件存在,且大小非0,内容非空 size
-e: 文件存在则为真 exist
-r: 文件可读 read
-w: 文件可写 write
-x: 文件可执行 execute
-L: 连接文件 link
f1 -nt f2 :文件1比文件2新则为真 new than
f1 -ot f2 :文件1比文件2旧则为真 old than3.字符串测试操作符:比较2个字符串是否相同,是否为0,
=:是否相同,对于$a这种最好用"{$a}"
-z: 字符串长度为0,则为真
-n: 字符串长度不为0,则真 -->表示存在
"s1"=="s2": 相等为真
"s1"!="s2": 不相等为真4.整数比较测试符号
-eq: 相等
-ne: 不等
-gt: 大于 great
-ge: 大于等于
-lt: 小于 lower
-le: 小于等于5.特别提醒:
在中括号[]中使用 >,<时,需要转义,因为重定向也用这个
等号==和不等号!=在[]中使用,不需要转义
变量shell最好添加上双引号
字符串比较一定要加上双引号 [ -n "$file" ]
"-a"和"-o" 逻辑操作符中括号[]使用
"&&"和"||" 逻辑操作符双中括号[[]]使用
中括号2端必须有空格
如果有多个命令,可以使用{ command1; command2} 注意封号
[ $ERROR -eq 0 ] && echo "YES" || {echo "NO" ; exit 1}
自己设定的环境变量一定要在脚本里重新体现以下
export hhh_IP=$1 -->输出环境变量
&:后台执行
==>bg: 当前脚本后台执行
==>nohup 程序后台运行
--> nohup ./while.sh &
jobs:查看执行的脚本或任务
fg:当前脚本或任务拿到前台执行,多任务可以用+任务编号执行,例如,fg 1
ctrl + z :暂停执行当前脚本
ctrl + c :停止执行当前脚本6.逻辑操作符:
&&: ==> -a
||: ==> -o
!:取反5.if条件语句
1.格式:
第一个:
if [ ]; then
fi
第二个:
if [ ]
then
命令
else
命令
fi
==> if [ -f "$file" ];then echo 1;else echo 0;fi
==> if [ -f "$file" ] && echo 1 ||echo 0;fi
第三个:只有一个else哦
if [ ]
then
命令
elif [ ]
then
指令
else
fi
2.6.判断字符串是否为数字的多种方法
1.sed + 正则表达式
[ -n "`echo $num|sed 's/[0-9]//g'`" -a -n "`echo $2|sed 's/[0-9]//g'`" ] && echo "Both are not number" && exit 1
==>[ -n "`echo $num|sed 's/[0-9]//g'`" -a -n "`echo $2|sed 's/[0-9]//g'`" ] && { echo "both are not num ; exit 1"}
==>[ -n "`echo $1|sed 's/[0-9]//g'`" ] && [ -n "`echo $2|sed 's/[0-9]//g'`" ]
==>替换数字为空,-n表示存在且不为空
2.变量的子串替换+正则表达式
num=hello
[ -z "`echo "${num//[0-9]}"`" ]
3.expr
expr $a + 0 &>/dev/null && echo int || echo char7.Mysql数据库是否正常的判断
1.Mysql端口号监控
2.Mysql进程监控
3.通过Mysql命令和账户连接Mysql,根据返回状态判断
-->注意远程连接 mysql -uroot -proot -h localhost -e "select version()"
-->必须有mysql客户端,要有账户,密码,主机的授权
4.根据php/java程序判断 -->推荐,报警的依据是网站数据库是否访问正常,而不是服务是否开启
5.综合运用以上4个
6.多考虑,多用变量,规范化8.Case条件语句
1.结构语法
case "字符变量" in
值1):
指令;;
值2):
指令;;
...
*):
指令;;
esac2.
9.while条件句
1.while读取文件的方式
1.while read line
do
echo $line
done</var/log/messages -->利用while去读内容
2.cat $FILE |while read line
...10.until条件句 -->了解
until 条件
do
指令
done11.for循环结构
格式1;
for i in $@
格式2:c语言
for ((i=0;i<1;i++))
例子: for i in 5 4 3 2 1
for i in {5..1}12.break,continue,exit
break: 退出当前xunh
continue:退出当前判断,执行后续的循环
exit: 结束shell程序
return: 退出函数13.shell函数的语法
1.格式
function 方法名(){ 方法名(){} }
2.调用
直接执行函数名
函数名 参数1 参数2 -->check_url www.baidu.com
-->命令行给脚本传参数
hhh(){
echo "$1"
}
hhh $1
3.函数体和执行脚本的分离
1.创建函数库脚本 /etc/init.d/hhh_function
2.添加执行权限 chmod +x /etc/init.d/hhh_function
3.查看执行权限 ll /etc/init.d/hhh_function
4.开发执行脚本调用函数 . /etc/init.d/hhh_function (也可以使用source调用)14.数组:相同数据类型的元素按照一定的顺序排列的结合
0.man bash 搜索Arrays
1.数组的定义:
array=( a b c )
array=([1]=2015 [2]=2016 [3]=2017)
--> echo ${arr[1]} 输出2015
array[0]=2015 array[1]=2016 array[2]=2017重点:文件的输出作为数组:
array=($(ls *.sh))
==> array=(`ls *.sh`)2.数组的长度
echo ${#array[*]}
echo ${#array[@]}
3.数组的添加/取消/替换
unset array
unset array[0] -->删除第一个数组元素
array[3]=d
4.数组的全部输出
echo ${array[@]}
echo ${array[*]}
5.数组内容的截取和替换
echo ${array[*]:2:1} -->输出b, 从数组下标2开始取,取出来1个数字
echo ${array[*]/d/e} -->匹配到d替换为e,实际中不生效,显示生效
array1=${array[*]/d/e}
echo ${array[*]}
6.数组的替换
echo ${array[@]/g/h}15.SHELL脚本的调试技巧
1.使用dos2unix命令处理脚本
检查脚本没有问题,但是执行就是报错,使用dos2unix格式化
2.使用echo命令调试
例如,在变量读取和修改之前加入echo命令
Linux 下Shell的学习2的更多相关文章
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- Linux 下Shell的学习
1.Shell学习 1.什么是Shell shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...
- linux下shell脚本学习
在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...
- Linux 下Shell的学习3-优秀demo
优秀的DEMO cat /etc/init.d/functions -->里面有颜色定义cat /etc/rc.d/rc.sysinit cat /etc/init.d/nfscat /et ...
- Linux 下Shell的学习3-service编程
1. vim /etc/init.d/nginx 2. chmod 755 /etc/init.d/nginx 3. service nginx status #!/bin/bash # nginx ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- 06 Linux下Shell介绍
一.概述 每个人在成功登陆Linux后,系统会出现不同的提示符号,例如$,~,#等,然后你就可以开始输入需要的命令.若命令正确,系统就会依据命令的要求来执行,直到注销系统为止,在登陆到注销期间,输入的 ...
- Linux 下Shell变量,环境变量的联系与区别
Linux下Shell变量,环境变量的联系与区别 by:授客 QQ:1033553122 1. 简介 linux下的变量可分成两种:Shell变量和环境变量. Shell变量,又称本地变量,包括私有 ...
随机推荐
- java 命令--备忘
java -Djava.ext.dirs=/tmp/spark-sample/lib/ -cp ./spark-sample-1.0.jar com.sample.StartLauncher
- 性能调优-CPU方面,内存方面
CPU调优 首先要清楚数据库应用的分类,一般分为两类:OLTP(Online Transaction Processing,在线事务处理)和OLAP(Online Analytical Process ...
- Spring框架的设计理念
它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定 ...
- Linux文件夹打包发送到本地
tar -cvf script.tar scriptsz script.tar 具体: sz/rz命令: 一般来说,linux服务器大多是通过ssh来进行远程的登陆和管理的,如何在命令方式下上传和 ...
- ReferenceError: “alert” is not defined
用Node.js单独运行js文件时,其中定义的alert不可用 alert is not part of JavaScript, it's part of the window object prov ...
- ASP.NET MVC Core Starter Kit
上一篇博文<创建.NET Core程序的Nuget Package>提到准备创建一个Nuget包,用于自动生成一个简单的ASP.NET MVC Core的示例项目.本来是打算用Nuget实 ...
- ORCLE报错解决(ora-01747:无效的用户.表.列,表.列)
原因: 这个问题出现是因为表中存在关键字造成.
- Ubuntu 16.04安装测试MQTT Mosquitto
环境:Ubuntu 16.04 介绍MQTT MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信.它通常用于地理跟踪车队,家庭自动化,环境传感器网络和公用事业规模数 ...
- sublime text3 破解及常用插件
sublime text3 下载 破解 submelime Text > About sublime Text //看是否注册并 查看当前的版本 然后百度或google搜索 'sublime t ...
- Vue生命周期学习
转自https://www.w3cplus.com/vue/vue-instances-and-life-cycles.html Vue实例虽然没有完全遵循MVVM模型,但Vue的设计无疑受到了它的启 ...