以下内容仅为个人学习使用,如有错误,欢迎指出

持续更新...............

一.首先创建.sh文件,打开并在文件的第一行输入#!/bin/sh

执行shell文件命令为:

. filename.sh

source filename.sh

二.常用命令

1.echo命令,变量

第二次变量赋值时,不用加$号,只有使用时才加

test='我是变量'
echo "$test"
或者
echo $test #如果这种情况使用变量,只需要在变量外加{}号
echo "it's num $testtest"
#改为
echo "it's num ${test}test"

#只读变量
var="variable"
readonly #删除变量
unset var_name #注意:只读变量是不可修改和删除的 #获取字符串长度
echo ${#var}
#截取字符串
echo ${var:1:3} #定义数组格式
array_name=(value0 value1 value2 value3)

#读取数组格式
valuen=${array_name[n]}

#读取数组长度,或者@变成*
length=${#array_name[@]}

#echo显示换行可以使用
echo -e "it \n is"
#显示结果到文件
echo "It is a test" > myfile
 

2.注释

#单行注释

# -------------------------

:<<EOF
多行注释
多行注释
多行注释
多行注释
EOF 或 :<<'
多行注释
多行注释
多行注释
' 又或者 :<<!
多行注释
多行注释
多行注释
!

3.read命令

用来读取用户在控制台上输入的内容

echo "please input you content"
#这里content自定义,就是一个变量名
read content echo "you input content is $content"

三.参数传递(函数调用的参数调用)

1.

#!/bin/sh

echo "共有$#个参数"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "所有参数:$*"
echo "脚本运行的当前进程id号为:$$"
if [ $? == 0 ]
then echo "当前程序没有错误"
else
echo "程序发生错误"
fi

结果为:

当程序没有发生错误时,$?就会返回0

msw@bogon:~/Desktop$ . fun.sh 2 5
共有2个参数
第一个参数为:2
第二个参数为:5
所有参数:2 5
脚本运行的当前进程id号为:92957
当前程序没有错误

2.特殊字符处理参数:

参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

四.数组

#!/bin/sh

#可以这样定义数组
new_array=('a' 2 'c' 4)
echo "The first element is ${new_array[0]}"
echo "Second element is ${new_array[1]}"
#获取数组的所有元素
echo "all element ${new_array[*]}"
echo "all element ${new_array[@]}"
#获取数组的长度
echo "element count is ${#new_array[*]}" # 也可以这样
two_array[0]=0
two_array[1]='b'
echo "The first element is ${two_array[0]}"
echo "Second element is ${two_array[1]}"

结果为:

The first element is a
Second element is 2
all element a 2 c 4
all element a 2 c 4
element count is 4
The first element is 0
Second element is b

五.循环大法 

#!/bin/sh

new_array=('a' 2 'c' 4)

# for 循环
echo "-----for cycle----"
for i in ${new_array[*]};
do
echo $i
done #while 循环 echo "-----while cycle----"
n=0
while [ $n -lt ${#new_array[@]} ]
do
echo ${new_array[$n]}
     # let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式
let n++
done

结果为:

-----for cycle----
a
2
c
4 -----while cycle----
a
2
c
4

六.运算符

1.

#!/bin/sh

a=8
b=5
echo "加 : `expr $a + $b `"
echo "减 : `expr $a - $b `"
echo "乘 : `expr $a \* $b `"
echo "除 : `expr $a / $b `"
echo "取余 : `expr $a % $b `"
if [ $a == $b ]
then
echo "a==b"
fi
if [ $a != $b ]
then
echo "a!=b"
fi

结果为:

加 : 13
减 : 3
乘 : 40
除 : 1
取余 : 3
a!=b

注意条件表达式的两边一定要留空格,否则会将运算表达式直接输出

msw@bogon:~/Desktop$ expr 1+2
1+2
msw@bogon:~/Desktop$ expr 1 + 2
3

这只是算数运算符,还有

2.关系运算符:

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

3.布尔运算符:

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

4.逻辑运算符:

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

5.字符串运算符:

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n "$a" ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

6.文件测试测试运算符

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

注意:使用 [[ ... ]] 条件判断结构,而不是 [ ... ],能够防止脚本中的许多逻辑错误。比如,&&||< 和 > 操作符能够正常存在于 [[ ]] 条件判断结构中,但是如果出现在 [ ] 结构中的话,会报错。

用法就不一一介绍了

七.流程控制

上面和下面都用过了,此处就不在举例了

1.if...elif...else:格式如下

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

2.for 循环:格式如下

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

3.死循环:或while true

while :
do
command
done

4.until循环:与while循环刚好相反,until 循环执行一系列命令直至条件为 true 时停止。

until condition
do
command
done

例:循环输出n,直到n大于5

#!/bin/sh

n=0
until [ $n -gt 5 ]
do
echo $n
let n++
done

结果为:

0
1
2
3
4
5

5.case:Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac

例:

#!/bin/sh

echo "input you name first letter"
read name
case $name in
'm')
echo "you is msw"
;;
'w')
echo "you is wbd"
;;
*)
echo "i don't know you"
;;
esac

结果为:

msw@bogon:~/Desktop$ . case.sh
input you name first letter
m
you is msw
msw@bogon:~/Desktop$ . case.sh
input you name first letter
w
you is wbd
msw@bogon:~/Desktop$ . case.sh
input you name first letter
r
i don't know you

6.还有break和continue流程控制语句

n=0
while :
if [ $n == 3 ]
then
let n++
continue
fi
do
echo $n
let n++
if [ $n == 5 ]
then
break
fi
done

结果为:

0
1
2
4

到这里流程控制就差不多了

八.shell函数

1.

#!/bin/sh

#建立函数

new_function(){
echo "input one number"
read numone
echo "input one number again"
read numtwo
return $(($numone+$numtwo))
} #调用函数
new_function
#使用$?来获取函数的返回值
echo "you input two sum is $?"

结果为:

input one number
1
input one number again
2
you input two sum is 3

2.函数的参数调用

#!/bin/sh

new_fontion(){
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
} new_function 1 4 2

结果为:

1
4
2

九.持续更新中.....

先上两小段代码吧

# 执行系统命令语法: `系统命令`
ip=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'`
#ip1=/sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\\([0-9.]\\{7,15\\}\\) .*/\\1/p' | grep -v 127.0.0.1
while True;
do
echo "$ip"
ipp=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'`
echo "$ipp"
if [ "$ip" != "$ipp" ];
then
`sudo shutdown -h 16:00`
else
echo "正常"
fi
sleep 1s
done

这段代码主要是监控ip地址是否发生改变,如果IP地址改变则执行关机

#!/bin/sh

echo "please input you name"
read name
echo "please input one number:"
read numbero
echo "please input one number again:"
read numbert
if [[ x$name == 'x' || x$numbero == 'x' || x$numbert == 'x' ]]
then
echo "you input has null"
elif [[ $numbero -gt $numbert && $name == 'msw' ]]
then
echo "you input one big"
elif [ $numbero -lt $numbert ]
then
echo "you input two big"
else
echo "ne"
fi

这段代码没什么意思,主要是联系我见天学习的几个命令和判断语法

重难点详解

x$name == 'x' 判断输入是否为空,还可以写成

[ -n $name ] :长度不为0则真

[ -z $name ] :   长度为0为真

注意:在[[]]中才可使用&& ||语法,如果是[],和是-a, 或是-o

  还有要注意字段间的空格

今天就先到这里吧!

























shell脚本语法学习的更多相关文章

  1. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  2. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

  3. Shell脚本编程学习入门 02

    Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):   #! ...

  4. Linux&nbsp;shell脚本全面学习

    Linux shell脚本全面学习 1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它 ...

  5. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  6. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  7. Shell脚本基础学习

    Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...

  8. U-Boot shell脚本语法

    /********************************************************************** * U-Boot shell脚本语法 * 说明: * 之 ...

  9. Shell脚本的学习(二)

    Shell脚本的学习(二) 方法: 1) 一个计算器: 2)递归实现打印目录    3)方法调用

随机推荐

  1. Linux umask命令详解

    Linux umask命令 Linux umask命令指定在建立文件时预设的权限掩码.一般来说,umask命令是在/etc /profile文件中设置的 umask可用来设定[权限掩码].[权限掩码] ...

  2. ios-微信支付登录分享-notification通知

    // //  AppDelegate.m //  NewAppBase // //  Created by ENERGY on 2018/5/17. //  Copyright © 2018年 ENE ...

  3. php中正则表达式详解

    概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串.常用的语言基本上都有正则表达式,如JavaScript.java等.其实,只有了解一种语言的正 ...

  4. IIS6.0+win2003部署MVC网站的一些问题

    安装iis,framework环境不谈.MVC网站部署 步骤: 1.为程序新建一个应用程序池(将default的那个程序池作为模板就可以了) 2.web服务扩展一些启用一些必要的服务 3.新建网站 描 ...

  5. 简单分析下mybatis中mapper文件中小知识

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-// ...

  6. django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)

    models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True),  OneToOneField("Author" ...

  7. Python中xlrd和xlwt模块使用方法

    本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...

  8. 06python上

    product_list=[ ('Mac',9000), ('kindle',800), ('tesla',900000), ('python book',105), ('bike',2000), ] ...

  9. Open SuSE 安装Python3.6

    1. 下载Python3.6 tar包 去除Modules/Setup文件167行的注释 readline readline.c -lreadline -ltermcap 2. 下载readline- ...

  10. maven的单元测试中没有

    原因:BaseTest没有找到单元测试造成的 增加一个空的单元测试 @Testpublic void testNothing(){} 异常现象:在maven项目执行mvn install 或mvn t ...