shell脚本基础语法记录

1.变量的使用

1.1 变量的定义

Shell 支持以下三种定义变量的方式

url=chadm
echo $url
name='chadm'
echo $name
author="chadm"
echo $author

# 打印变量有2种方式
echo $author
echo ${author}

# (())和let都只能使用整数
a=$((10+66)
echo $a
let b+=6
echo $b

注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样

1.2 将命令的结果赋值给变量
variable=`command`
variable=$(command)
1.3 获取输入参数

运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用$n的形式来接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推

#定义函数
function func(){
    echo "Language: $1"
    echo "URL: $2"
}
#调用函数
func shell "https://test"

特殊参数

  • $0 当前脚本的文件名。
  • $n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是$2。
  • $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。当被双引号""包含时,
  • $@ 与 $* 稍有不同 $? 上个命令的退出状态,或函数的返回值,
  • $$ 当前 Shell 进程 ID。对于 Shell
    脚本,就是这些脚本所在的进程 ID。

2.字符串相关

2.1 获取字符串长度

使用命令: ${#string_name}

str="hello world"
echo ${#str}  // 输出结果是11

2.2 字符串拼接
在 Shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接

name="Shell"
url="http://test"
str1=$name$url  #中间不能有空格
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串
str4="$name: $url"  #这样写也可以
str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5

输出结果:
Shellhttp://test
Shell http://test
Shell: http://test
Shell: http://test
ShellScript: http://testindex.html

2.3 字符串截取

从左开始截取:${string: start :length}

string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length
是要截取的长度(省略的话表示直到字符串的末尾

从右开始截取:${string: 0-start :length}

同第 1) 种格式相比,第 2) 种格式仅仅多了0-,这是固定的写法,专门用来表示从字符串右边开始计数

示例:

# 截取最后一位,都是输出o
name="hello"
echo ${name:4:1}   # 从左边开始截取

echo ${name:0-1:1}  # 从右边开始截取

总结:

  • ${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
  • ${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
  • ${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
  • ${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
  • *${string#chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
  • *${string##chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
  • *${string%chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
  • *${string%%chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符

3.数组的使用

在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔

arr=(12 23 "hello" )
# 获取数组第一个元素
echo ${arr[0]}

# 获取所有元素
echo ${arr[*]}
echo ${arr[@]}

# 获取数组长度
echo ${#arr[*]}
echo ${#arr[@]}

# 数组拼接
arr2=(56 "world")
arr3=(${arr[*]} ${arr2[*]})
echo ${arr3[*]}

对应的输出结果
12
12 23 hello
12 23 hello
3
3
12 23 hello 56 world

4.逻辑流程控制

4.1 if/esle语句

最后必须以fi来闭合,fi 就是 if 倒过来拼写

if  condition
then
    statement(s)
fi

或者
if  condition;  then
    statement(s)
fi

针对整数的,使用(())
双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令

a=1
b=2
if (( $a == $b ))
then
    echo "a和b相等"
else
    echo "a和b不相等"
fi

针对字符串
[[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立

str1="1"
str2="2"
if [[ -z $str1 ]] || [[ -z $str2 ]]  #不需要对变量名加双引号
then
    echo "字符串不能为空"
elif [[ $str1 < $str2 ]]  #不需要也不能对 < 进行转义
then
    echo "str1 < str2"
else
    echo "str1 >= str2"
fi
4.2 循环

break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环

while


while ((i <= 10))
do
    ((sum += i))
    ((i++))
done
echo "The sum is: $sum"

switch

printf "Input integer number: "
read num
case $num in
    1)
        echo "Monday"
        ;;
    2)
        echo "Tuesday"
        ;;
    3)
        echo "Wednesday"
        ;;
    4)
        echo "Thursday"
        ;;
    5)
        echo "Friday"
        ;;
    6)
        echo "Saturday"
        ;;
    7)
        echo "Sunday"
        ;;
    *)
        echo "error"
esac

for

sum=0
for ((i=1; i<=10; i++))
do
    ((sum += i))
done
echo $sum

5.运算&判断

5.1 数字
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

参数 说明

  • -eq 等于则为真
  • -ne 不等于则为真
  • -gt 大于则为真
  • -ge 大于等于则为真
  • -lt 小于则为真
  • -le 小于等于则为真
5.2 字符串
num1="hello"
num2="world"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

参数说明

  • = 等于则为真
  • != 不相等则为真
  • -z 字符串 字符串的长度为零则为真
  • -n 字符串 字符串的长度不为零则为真
5.3 文件
cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

参数 说明

  • -e 文件名 如果文件存在则为真
  • -r 文件名 如果文件存在且可读则为真
  • -w 文件名 如果文件存在且可写则为真
  • -x 文件名 如果文件存在且可执行则为真
  • -s 文件名 如果文件存在且至少有一个字符则为真
  • -d 文件名 如果文件存在且为目录则为真
  • -f 文件名 如果文件存在且为普通文件则为真
  • -c 文件名 如果文件存在且为字符型特殊文件则为真
  • -b 文件名 如果文件存在且为块特殊文件则为真
5.4 bool运算&逻辑运算

bool运算

  • ! 非运算,表达式为 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。

逻辑运算

  • && 逻辑的 AND
    [[ $a -lt 100 && $b -gt 100 ]] 返回 false
  • || 逻辑的 OR
    -[[ $a -lt 100 || $b -gt 100 ]] 返回 true
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值