Shell编程笔记

变量

一、变量定义

name="fallen_leaves"
  1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
  2. 中间不能有空格,可以使用下划线(_)
  3. 不能使用标点符号
  4. 不能使用bash里的关键字
  5. 变量名与等号之间不能有空格

 使用变量时,要在变量名前加上 $

echo $name
echo ${name}

二、只读变量
  使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变

readonly name	# 只读变量

三、删除变量
  变量被删除后不能再次使用。unset 命令不能删除只读变量

unset name		# 删除变量

四、字符串
  字符串可以用单引号,也可以用双引号,也可以不用引号,但是单引号里的任何字符都会原样输出,而且单引号字符串中的变量是无效的,同时单引号字串中不能出现单引号。双引号里不仅可以有变量而且可以出现转义字符

name="fallen_leaves"
greeting="hello, ${name} !"
echo $greeting

echo ${#name}	# 获取字符串长度

五、数组
  bash支持一维数组(不支持多维数组),并且没有限定数组的大小

name=(name0 name1 name2)	# 数组定义
people=${name[0]}			# 获取一个元素
echo ${name[@]}			# 获取所有元素
lengh=${#name[@]}			# 获取数组长度

参数传递

  在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n为执行脚本的第一个参数,2为执行脚本的第二n个参数

example.sh 

#echo "参数传递"
#echo "文件名:$0"
#echo "第一参:$1"
#echo "第二参:$2"
[john@localhost Shell]$ sh example.sh 1 2
参数传递
文件名:example.sh
第一参:1
第二参:2

运算符

一、算数运算符

#! /bin/bash

a=5
b=3

val=`expr $a + $b`	# +
echo "$val"

val=`expr $a - $b`	# -
echo "$val"

val=`expr $a \* $b`	# *
echo "$val"

val=`expr $a / $b`	# /
echo "$val"

if [ $a == $b ]		# ==
then
  echo "a等于b"
elif [ $a != $b ]		# !=
then
  echo "a不等于b"
fi
[john@localhost Shell]$ sh test.sh 
8
2
15
1
a不等于b

二、关系运算符

#! /bin/bash

a=5
b=3

if [ $a -eq $b ]	# a=b? 相等返回 true
then
  echo "a 等于 b"
else
  echo "a 不等于 b"
fi

if [ $a -ne $b ]	# a=b? 不相等返回 true
then
  echo "a 不等于 b"
else
  echo "a 等于 b"
fi

if [ $a -gt $b ]	# a>b? 是则返回 true
then
  echo "a 大于 b"
else
  echo "a 不大于 b"
fi

if [ $a -lt $b ]	# a<b? 是则返回 true
then
  echo "a 小于 b"
else
  echo "a 不小于 b"
fi

if [ $a -ge $b ]	# a>=b? 是则返回 true
then
  echo "a 大于或等于 b"
else
  echo "a 小于 b"
fi

if [ $a -le $b ]	# a<=b? 是则返回 true
then
  echo "a 小于或等于 b"
else
  echo "a 大于 b"
fi
[john@localhost Shell]$ sh test.sh 
a 不等于 b
a 不等于 b
a 大于 b
a 不小于 b
a 大于或等于 b
a 大于 b

三、BOOL运算符
  ! 非运算,表达式为 true 则返回 false,否则返回 true

[[ ! false ]]

  -o 或运算,有一个表达式为 true 则返回 true

[[ $a -lt 20 -o $b -gt 100 ]]

  -a 与运算,两个表达式都为 true 才返回 true

[[ $a -lt 20 -a $b -gt 100 ]]

四、逻辑运算符
  && 逻辑的 AND

[[ $a -lt 100 && $b -gt 100 ]]

  || 逻辑的 OR

[[ $a -lt 100 || $b -gt 100 ]]

五、字符串运算符

  = 检测两个字符串是否相等,相等返回 true。

[ $a = $b ]

  != 检测两个字符串是否相等,不相等返回 true

[ $a != $b ]

  -z 检测字符串长度是否为0,为0返回 true

[ -z $a ]

  -n 检测字符串长度是否为0,不为0返回 true

[ -n $a ] 

  str 检测字符串是否为空,不为空返回 true

[ $a ] 

逻辑控制

一、if条件判断:

if [ 条件语句1 ]
then
	逻辑语句1
elif [ 条件语句2 ]
then
	逻辑语句2
else
	逻辑语句3
fi

二、for循环:

for var in item1 item2..
do
	逻辑语句
done

三、while循环

while (( 条件语句 ))
do
	逻辑语句
done

四、until条件循环

until 条件语句
do
	逻辑语句
done

五、case选择

case var in
模式1)
	逻辑语句
	;;
模式2)
	逻辑语句
	;;
esac

函数

  shell中函数可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。回可以加return 返回,如果不加,将以最后一条命令运行结果,作为返回值

demo(){
  echo "Hello world"
}

echo "函数开始"
demo
echo "函数结束"

max(){
  echo "输入第一个数:"
  read a;
  echo "输入第二个数:"
  read b;
  echo "两个数分别为$a$b"

  if [ $a -gt $b ]
  then
    return $a
  else
    return $b
  fi
}

max
echo "最大的数为:$?"
[john@localhost Shell]$ sh test.sh 
函数开始
Hello world
函数结束
输入第一个数:
1
输入第二个数:
2
两个数分别为1、2
最大的数为:2

  函数传参

#! /bin/bash

show(){
  echo "第一个参数:$1"
  echo "第一个参数:$2"
  echo "第一个参数:$3"
  echo "参数数量:$#"
  echo "所有参数:$*"
}

show hello fallen leaves
[john@localhost Shell]$ sh test.sh 
第一个参数:hello
第一个参数:fallen
第一个参数:leaves
参数数量:3
所有参数:hello fallen leaves

输入/输出重定向

command > file 	将输出重定向到 file。
command < file 	将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file        将文件描述符为 n 的文件重定向到 file。
n >> file       将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 	        将输出文件 m 和 n 合并。
n <& m 	        将输入文件 m 和 n 合并。

  dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果

  command > file 2>&1:这里的&没有固定的意思,放在>后面,表示重定向的目标不是一个文件,而是一个文件描述符:
  1 => stdout
  2 => stderr
  0 => stdin


文件包含

和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

Shell 文件包含的语法格式如下:

. filename   # 注意点号(.)和文件名中间有一空格source filename

test1.sh

#! /bin/bash

name="fallen_leaves"

test2.sh

#! /bin/bash

. ./test1.sh
# source ./test1.sh

echo "姓名: $name"
[john@localhost Shell]$ ./test2.sh 
姓名: fallen_leaves
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值