美文网首页
Shell 编程基础

Shell 编程基础

作者: 芝兰之室也 | 来源:发表于2021-08-01 17:28 被阅读0次

概念:

实际上是一个应用程序,是人与Unix系统进行交互的接口;编写脚本时,也可以理解成一种命令语言或者程序语言。

Shell种类:

Shell应用程序

Shell脚本编程不需要额外的安装编译器,它可以直接用编辑器直接编辑,然后直接在Shell上直接运行即可。通常,我们在编写脚本时,在第一行需要用#!来指定解释器来运行Shell脚本,比如,#!/bin/sh。

1、变量定义

(1) 变量的默认数据类型是字符串类型;
(2) 等号=和变量及被赋的值之间不能有空格;
(3) 数据运算用$[运算表达式]形式;

2、字符串操作

  • 获取字符串的长度:${#变量};
  • 截取字符串:${变量:x:y};
  • 替换字符串中子字符串:${变量/子字符串/替换的字符串};
  • 删除字符串中的子字符串:可以通过替换子字符串的方法实现,${变量/子字符串/};;
  • 字符串大小写替换:^^转换成大写;,,转换成小写;
#!/bin/bash
a="Hello World"
echo ${#a} #获取字符串长度
echo ${a:6:3} #从下标6开始截取3字
echo ${a/ll/hh} #将字符串中的ll替换为hh
echo ${a/or/} #删除子字符串or
echo ${a^^} #全部转化成大写
echo ${a,,} #全部转化成小写

3、数字运算
命令方式主要有let declare expr等命令;

let 命名后直接跟上运算表达式即可:

a="4"
b="2"
let c1=${a}+${b}
echo "a + b =" ${c1}

expr 注意两点:

  • 运算符和两边的变量需要使用空格隔开;
  • 需要注意需要将*转义为*。
#!/bin/sh
a=4
b=2
c1=$(expr ${a} + ${b})
echo "a + b =" ${c1}

declare -i ,将变量声明为整数型:

#!/bin/sh
a="4"
b="2"
declare -i c1=${a}+${b}
echo "a + b =" ${c1}

自增自减:

let c1++
echo "c1 =" ${c1}

小数运算:在默认情况下shell是不支持小数运算,可以借助Linux平台下的bc计算器进行小数运算。

a=1.411
b=1.332

c1=`echo "$a+$b"|bc`
c4=`echo "scale=3;$a/$b"|bc` #scale用来指定小数的位数

echo $c1
echo $c4

4、数组

  • 声明数组:array=(value1 value2 value3 ...)
  • 访问元素:array[0]
  • 访问所有元素:array[*] 或者 array[@]
  • 获取数组长度:#array[*] 或者 #array[@]
a=(hello world code)
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}

echo ${a[*]}
echo ${a[@]}

echo ${#a[*]}

5、数值关系运算

  • 等于:-eq,equal
  • 不等:-ne,not equal
  • 大于:-gt,greater than
  • 小于:-lt,less than
  • 大于等于:-ge,greater equal
  • 小于等于:-le,less equal

注意:
中括号两边是有空格隔开,运算符和变量之间也有空格隔开

#!/bin/sh
a=1
b=2

if [ $a -eq $b ];then
 echo "yes"
else
 echo "no"
fi

6、字符串关系元算

  • =:判断两个字符串是否相等,相等则为真,
    [ $a = $b ]
  • != 判断两个字符串是否不相等,不相则为真,
    [ $a != $b ]
  • -z 判断字符串长度是否为0,如果是则为真,
    [ -z $a ]
  • -n 判断字符串长度是否不为0,如果是则为真,
    [ -n "$a" ]
  • 美元符号判断字符串是否为空,如果不为空则为真,[ -n "$a" ]
#!/bin/sh
a="hello"
b="hello"

echo "a = b ?"
if [ $a = $b ];then
 echo "yes"
else
 echo "no"
fi

7、逻辑运算

  • 与:&&
  • 或:||

8、条件语句

  • if else then elif fi 语句
a=2

if [ $a == 1 ];then
    echo "a = 1"
elif [ $a == 2 ];then
 echo "a = 2"
else
 echo $a
fi
  • case in esac 语句
#!/bin/sh

read -p "please in put a number:" num

case $num in 
"1")
 echo "Start 1th flow"
 ;;
"2")
 echo "Start 2th flow"
 ;;
*)
 echo "Do nothing"
esac

9、循环语句

  • for
a=("hello" "world" "hello" "shell")

for((i=0;i<4;i++))
do 
 echo ${a[i]}
done
a=("hello" "world" "hello" "shell")

for v in ${a[*]}
do 
 echo $v
done
  • while
a=("hello" "world" "hello" "shell")
i=0

while [ $i -lt 4 ]
do 
 echo ${a[i]}
 let i++
done

与while循环恰好相反的循环until循环,在until循环中条件表达式不成立才会进入循环。

  • until
a=("hello" "world" "hello" "shell")
i=0

until [ $i -ge 4 ]
do 
 echo ${a[i]}
 let i++
done

对于until循环语句来说,一般没有上面的几种循环语句较为常用。

  • select
    特殊的循环select,每行打印前面都有一个序号,通常和case...in语句一起使用。
a=("公司A" "公司B" "公司C" "公司D")

select v in ${a[*]}
do
 case $v in 
  "公司A")
   echo "恭喜您,你选择了公司A !"
   break
   ;;
  "公司B")
   echo "恭喜您,你选择了公司B !"
   break
   ;;
  "公司C")
   echo "恭喜您,你选择了公司C !"
   break
   ;;
  "公司D")
   echo "恭喜您,你选择了公司D !"
   break
   ;;
  *)
   echo "您没有选择任何一个公司,请重新选择!"
  esac
done

10、函数

function test1() {
 echo "this is a function"
 return 0
}

test1 #调用函数

输入参数:

function test2() {
 echo "parameter1 : $1"
 echo "parameter2 : $2"
 return 3
}

test2 1 2 #调用函数
echo $? #获取函数返回值
  • 函数名中是不要定义形参的,在调用时在函数后面加上实参就可以了。
  • 函数体中可以通过$加参数编号访问参数,比如,第一个参数$1,到第十个参数以上就需要加上{}符号,比如${10};
  • 函数返回值需要在调用该函数后通过$?获得。

11、文件包含
有的时候某个功能可能被多个脚本使用,这时就需要在将这个功能放到一个公共的文件中,需要这个功能的脚本直接包含这个公共的文件即可,这就是文件的包含,同样的Shell也是支持文件包含的。

使用.或source加上文件名来包含文件

先建一个文件test_one.sh:

#test_one.sh
var1=1

再建一个文件test_two.sh:

#test_two.sh
var2=2

再建一个文件,包含test_one.sh和test_two.sh这两个文件:

source ./test_one.sh
source ./test_two.sh

echo "file one var1=${var1}"
echo "file two var2=${var2}"

相关文章

  • day 28

    shell编程基础 shell编程一小时光速入门web集群架构会用到shell编程基础 1、为什么要学shell编...

  • 2019-01-25

    Linux系统Shell编程指南 前言 适合人群:有类似C编程基础的人 一、Shell编程介绍 Shell解释型语...

  • day28-Shell脚本基础

    SHELL编程基础 三小时光速入门因为集群架构会用到shell编程基础,提前讲一丢丢。 shell编程 1. 为什...

  • <<编程基础-语言Python.Shell>&

    <<编程基础-语言Python.Shell>>

  • day28-2019年4月9日

    shell编程基础 1、为什么要学shell编程? linux系统中会大量得使用shell,工作中也需要...

  • day51 课堂笔记(shell编程规范书写)

    第一章、为什么要学shell? 1.1、学好shell编程所需的Linux基础 1.2、如何才能学好shell编程...

  • Shell编程基础知识

    关于shell编程基础: 1.为什么要学习shell编程? Linux系统中会大量的使用Shell,工作中我们也需...

  • shell编程-shell编程基础

    1.什么是shell shell是介于用户和操作系统之间的一个接口,用来接收用户的键盘输入,并分析和执行输入字符串...

  • linux基础(五)

    过程式编程:以指令为中心 对象式编程:以数据为中心 bash基础特性 shell 编程:过程式,解释执行shell...

  • BigData~01:Shell

    Shell编程基础 内容大纲 一、Shell编程二、高级文本处理命令:sed、awk、cut三、crontab定时...

网友评论

      本文标题:Shell 编程基础

      本文链接:https://www.haomeiwen.com/subject/tbxrvltx.html