一、
1 if语句使用 注意
a=1 #等号两边不能有空格
b=1
if [ $a -eq $b ];then #if后面要有空格 中括号两边最好留空格否则可能会报错
echo 11111111110 $a #字符串变量连接处理
fi
二、 中括号内,数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,= [ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<> [ INT1 -gt INT2 ] INT1大于INT2返回为真 ,> [ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>= [ INT1 -lt INT2 ] INT1小于INT2返回为真 ,< [ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=
三、字符串判断
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真 [ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真 [ STRING1 ] 如果字符串不为空则返回为真,与-n类似 [ STRING1 == STRING2 ] 如果两个字符串相同则返回为真 [ STRING1 != STRING2 ] 如果字符串不相同则返回为真 [ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。 [ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。
四、逻辑判断
[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。 [ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。 [ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。 [ ] || [ ] 用OR来合并两个条件 [ ] && [ ] 用AND来合并两个条件
五、文件/目录判断:
例如: b='/opt/elasticsearch-jdbc-2.3.3.0/bin/statefile.json' if [ -a $b ];then echo 11111111110 fi [ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块文件则返回为真。 [ -c FILE ] 如果 FILE 存在且是一个字符文件则返回为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则返回为真。 [ -e FILE ] 如果 指定的文件或目录存在时返回为真。 [ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真。 [ -g FILE ] 如果 FILE 存在且设置了SGID则返回为真。 [ -h FILE ] 如果 FILE 存在且是一个符号符号链接文件则返回为真。(该选项在一些老系统上无效) [ -k FILE ] 如果 FILE 存在且已经设置了冒险位则返回为真。 [ -p FILE ] 如果 FILE 存并且是命令管道时返回为真。 [ -r FILE ] 如果 FILE 存在且是可读的则返回为真。 [ -s FILE ] 如果 FILE 存在且大小非0时为真则返回为真。 [ -u FILE ] 如果 FILE 存在且设置了SUID位时返回为真。 [ -w FILE ] 如果 FILE 存在且是可写的则返回为真。(一个目录为了它的内容被访问必然是可执行的) [ -x FILE ] 如果 FILE 存在且是可执行的则返回为真。 [ -O FILE ] 如果 FILE 存在且属有效用户ID则返回为真。 [ -G FILE ] 如果 FILE 存在且默认组为当前组则返回为真。(只检查系统默认组) [ -L FILE ] 如果 FILE 存在且是一个符号连接则返回为真。 [ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则返回为真。 [ -S FILE ] 如果 FILE 存在且是一个套接字则返回为真。 [ FILE1 -nt FILE2 ] 如果 FILE1 比 FILE2 新, 或者 FILE1 存在但是 FILE2 不存在则返回为真。 [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 老, 或者 FILE2 存在但是 FILE1 不存在则返回为真。 [ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则返回为真。
判断一个文件是否存在:
#!/bin/bash _prefix="/usr/local/nginx" time=`date +%Y%m%d%H` if [ -s ${_prefix}/logs/access.log ]; then echo "${time} hive data" >> /tmp/test.log else echo "${time} no data" >> /tmp/test.log fi
六、判断异常退出
if [ ! -n "$doiido" ]; then echo "$doiido is empty" exit 0 fi 例子: 1 变量相等: if [ "$var1" = "$var2" ]; then echo '$var1 eq $var2' else echo '$var1 not eq $var2' fi
2:数值的比较:
if [ "$num" -gt "150" ] echo "$num is biger than 150" fi
3:a>b且a<c
(( a > b )) && (( a < c )) [[ $a > $b ]] && [[ $a < $c ]] [ $a -gt $b -a $a -lt $c ]
4 a>b或a<c
(( a > b )) || (( a < c )) [[ $a > $b ]] || [[ $a < $c ]] [ $a -gt $b -o $a -lt $c ]
5 检测执行脚本的用户
if [ "$(whoami)" != 'root' ]; then echo "You have no permission to run $0 as non-root user." exit 1; fi
6 正则匹配
doiido="hero" if [[ "$doiido" == h* ]];then echo "hello,hero" fi
7 查看当前操作系统类型
#!/bin/sh SYSTEM=`uname -s` if [ $SYSTEM = "Linux" ] ; then echo "Linux" elif [ $SYSTEM = "FreeBSD" ] ; then echo "FreeBSD" elif [ $SYSTEM = "Solaris" ] ; then echo "Solaris" else echo "What?" fi
8 if利用read传参判断
#!/bin/bash read -p "please input a score:" score echo -e "your score [$score] is judging by sys now" if [ "$score" -ge "0" ]&&[ "$score" -lt "60" ];then echo "sorry,you are lost!" elif [ "$score" -ge "60" ]&&[ "$score" -lt "85" ];then echo "just soso!" elif [ "$score" -le "100" ]&&[ "$score" -ge "85" ];then echo "good job!" else echo "input score is wrong , the range is [0-100]!" fi
9 判断文件是否存在
#!/bin/sh today=`date -d yesterday +%y%m%d` file="apache_$today.tar.gz" cd /home/chenshuo/shell if [ -f "$file" ];then echo "OK" else echo "error $file" >error.log mail -s "fail backup from test" loveyasxn924@126.com <error.log fi
10这个脚本在每个星期天由cron来执行。如果星期的数是偶数,他就提醒你把垃圾箱清理
#!/bin/bash WEEKOFFSET=$[ $(date +"%V") % 2 ] if [ $WEEKOFFSET -eq "0" ]; then echo "Sunday evening, put out the garbage cans." | mail -s "Garbage cans out" your@your_domain.org fi
10 比较包含:
http://www.cnblogs.com/ginsonwang/p/5525340.html 方法一:利用grep查找 strA="long string" strB="string" result=$(echo $strA | grep "${strB}") if [[ "$result" != "" ]] then echo "包含" else echo "不包含" fi 先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果 如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。 这个方法充分利用了grep 的特性,最为简洁。
方法二:利用字符串运算符
strA="helloworld" strB="low" if [[ $strA =~ $strB ]] then echo "包含" else echo "不包含" fi 利用字符串运算符 =~ 直接判断strA是否包含strB。(这不是比第一个方法还要简洁吗摔!)
方法三:利用通配符
A="helloworld" B="low" if [[ $A == *$B* ]] then echo "包含" else echo "不包含" fi
方法四:利用case in 语句
thisString="1 2 3 4 5" # 源字符串 searchString="1 2" # 搜索字符串 case $thisString in *"$searchString"*) echo Enemy Spot ;; *) echo nope ;; esa
方法五:利用替换
STRING_A=$1 STRING_B=$2 if [[ ${STRING_A/${STRING_B}//} == $STRING_A ]] then ## is not substring. echo N return 0 else ## is substring. echo Y return 1 fi
12 shell ${}简单用法
file=/dir1/dir2/dir3/my.file.txt 我们可以用 ${ } 分别替换获得不同的值: ${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my 记忆的方法为: # 是去掉左边(在鉴盘上 # 在 $ 之左边) % 是去掉右边(在鉴盘上 % 在 $ 之右边) 单一符号是最小匹配﹔两个符号是最大匹配。 ${file:0:5}:提取第0个字符开始的连续5个字节:/dir1 ${file:5:5}:提取第 5 个字符开始的连续 5 个字符:/dir2 我们也可以对变量值里的字符串作替换: ${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my
13 各种字符变量区别
${ } 用来作变量替换。 一般情况下,$var 与 ${var} 并没有啥不一样。${ }界限明显,并且有很多截取与替换功能 $( ) 与 ` ` 基本相同 前者视觉效果好,但有些shell不支持,后者在嵌套的时候需要用反斜线做转译,但shell的支持性好 单引号与双引号 单引号告诉shell忽略所有特殊字符,而双引号忽略大多数,但不包括 $、\、`。 反引号里面内容会当成命令执行
14、属组的使用
数组定义: a=(2 3 4 5 6 66)
数组长度:echo ${#a[@]}
数组总数据:echo ${a[@]}
数组某一个值:echo ${a[1]}
15、函数返回值
get_date(){
echo '测试=='
}
result=`get_date`
echo $result
$? 获取函数的返回状态
相关推荐
本资源包含了两份文档——《shell十三问》和《shell基础十二篇》,是初学者快速掌握Shell编程的优秀教程。 1. **Shell基础知识** - **变量与赋值**:在Shell中,变量可以用来存储各种类型的数据,如字符串、整数。...
"SHELL基础十二篇"涵盖了初学者必须掌握的基本概念和技能,以下是对这些核心知识点的详细阐述: 1. **Shell简介**:Shell是操作系统与用户交互的接口,它允许用户通过命令行执行系统操作。常见的Shell有Bash...
Linux系统管理中的Shell基础主要涉及对Shell这一概念的理解和运用。Shell是用户和操作系统之间交互的一种接口,它提供了一个命令行界面,允许用户输入命令并执行。Shell能够解释用户输入的命令,并调用相应的系统...
### Linux Shell基础知识详解 #### 一、Shell简介 在Linux操作系统中,Shell是一种用户与操作系统交互的接口。Shell不仅能够执行命令,还可以编写脚本来自动化一系列任务。对于初学者而言,掌握基本的Shell命令和...
shell基础编程的一些例子,供查阅使用,涉及到shell脚本使用的某些功能
### Shell基础培训知识点详解 #### 一、Shell简介与作用 - **定义**: Shell是一种用C语言编写的程序,作为用户与Linux操作系统之间的桥梁。它既是命令语言也是程序设计语言,用户可以通过输入命令来实现对系统的...
10.3.1 Shell基础-Bash基本功能-历史命令与补全.mp4 10.3.2 Shell基础-Bash基本功能-别名与快捷键.mp4 10.3.3 Shell基础-Bash基本功能-输入输出重定向.mp4 10.3.4 Shell基础-Bash基本功能-多命令顺序执行与管道符...
下面将详细介绍创建 Shell 脚本、Shell 基础语法、流程控制语法以及如何定义和使用 Shell 函数。 首先,让我们理解一下 Shell 编程的基础。Shell 是操作系统提供的一种命令解释器,用户通过 Shell 与操作系统进行...
**Shell基础——Shell入门资料** 在信息技术领域,Linux操作系统因其开放源码、稳定性和灵活性而备受推崇。Linux的用户界面主要是命令行界面,也就是我们常说的终端或控制台,而Shell则是用户与操作系统交互的接口...
### Shell基础学习资料知识点详解 #### 一、Shell脚本的执行与权限设置 - **脚本执行前的声明**:任何Shell脚本都需在第一行声明所使用的Shell解释器,例如`#!/bin/sh`。这里的`#!/bin/sh`表示此脚本将通过`/bin/...
**Shell基础入门教程** Shell编程是Linux和Unix操作系统中的一种命令解释器,它允许用户通过命令行与系统交互,执行各种任务。本教程将引导初学者逐步了解并掌握Shell编程的基础知识。 ### 1. Shell简介 Shell是...
### CShell基础知识详解 #### 一、引言 在之前的讨论中,我们已经涉及了许多Cshell的功能,例如命令别名、作业控制等。此外,任何一系列Cshell命令都可以存储在一个文件中,并通过调用Cshell来执行这些命令。这样...
总之,Shell基础包括脚本编写、变量管理、环境变量的使用以及条件测试等,掌握这些基础知识对于高效地管理和自动化Linux系统任务至关重要。通过编写和理解Shell脚本,用户可以更好地理解和控制他们的操作系统。
shell是直接与内核进行交互,属于比用户程序层更深入的一种程序语言。shell的简单,高效,优雅,基础问答,让你对shell有初步了解
这份"shell基础"的学习资料,无论是对初学者还是有一定经验的shell编程者,都是一份非常宝贵的资源。以下是根据标题和描述提炼出的shell基础知识要点,我们将深入探讨这些主题。 1. **Shell介绍**:Shell是用户与...
京峰教育 Linux Shell 基础编程知识点总结 本资源摘要信息涵盖了 Linux Shell 基础编程的知识点,包括 Shell 编程入门、变量、If、While、For、Case、Select 基本语句案例演练、Find、Grep、Awk、Sed 四剑客深度...
最近在学习shell,找了很多资料,这个是其中不错的shell基础知识讲解,虽然比较基础,但是很容易懂~
Shell基础实验是Linux或Unix操作系统中的重要组成部分,它是一种命令行解释器,允许用户与操作系统进行交互。在本次实验中,我们将深入理解Shell的基本概念、常用命令以及脚本编写技巧。通过实践,你可以掌握如何...
本压缩包"shell基础学习资料.rar"包含的资源显然是为了帮助初学者掌握Shell的基础知识。以下是关于Shell的一些关键知识点的详细说明: 1. **Shell类型**:Linux中有多种Shell,比如Bash(Bourne-Again SHell)、Sh...