bash语法
-
按行读取文件
# 第一种方式 while read line do echo $line done < filename(待读取的文件) # 第二种方式 cat filename(待读取的文件) | while read line do echo $line done # 第三种方式 for line in `cat filename(待读取的文件)` do echo $line done -
一次性读取整个文件
# 第一种方式 value=`cat filename.txt` # 第二种方式 value=$(<filename.txt) -
字符串分割
# 方式1 # 使用内部域分割符 read -p "input str: " str # 读取输入的字符 IFS=' ' # 将空格设置为分隔符 read -ra strArr << "$str" # 将字符串读取到数组中,并由 IFS分配分隔符 for i in "${strArr[@]}" # 遍历数组中元素 do echo $i done # 使用 input str: a b c d a b c # 方式2 使用readarray命令进行字符串分割 read -p "input str" str #读取字符串的值,并将分隔符设置为 : 。 readarray -d : -t strArr <<<"$str" #根据设置的分隔符 : 来拆分字符串。 printf "\n" #遍历打印输出数组中的每一个值 for (( n=0; n < ${#strArr[*]}; n++ )) do echo "${strArr[n]}" done # 方式3 使用trim命令 #!/bin/bash str="test;test;test" #定界符 ; arr=($(echo $str | tr ";" "\n"))#将定界符定义给 tr for i in "${arr[@]}" do echo $i done # 方法4 str="1,2,3,4,5,6" arr=(${str//,/ }) for i in ${arr[*]} do echo $i done -
bash 数组的定义声明与使用
https://blog.csdn.net/kang19970201/article/details/87735276
数组中的元素要用空格隔开,若用逗号隔开,则会被认为是一个整体。
若不指定打印哪个变量,则默认打印第一个下标的变量。
若指定下标,负数表示从后往前数,如 -1 表示倒数第一个,-3 表示倒数第三个
普通数组
array1=(1 2 3 4) array2=(1,2,3,4) echo $array1 => 1 echo $array1 => 1,2,3,4 echo $array1[2] => 3 echo $array1[-1] => 4普通数组,自定义索引位置
array[0]=1 array[1]=2 array[2]=3 array[3]=4 echo ${array[*]} => 1 2 3 4 echo ${array[@]} => 1 2 3 4 echo ${!array[@]} # 打印下标 => 0 1 2 3 echo ${!array[*]} => 0 1 2 3 # 打印数组长度 echo ${#array[*]} => 4 echo ${#array[@]} => 4 # 打印某个变量的长度 echo ${#array[2]}关联数组
关联数组支持字符串作为索引。使用关联数组必须先使用declare -A 声明它
declare -A array array=([a1]=apple [a2]=pear) # a1,a2 是数组的索引,即下标。 echo ${array[a1]} => apple echo ${array[a2]} => pear echo ${array[*]} => apple pear echo ${array[@]} => apple pear # 查看索引a2这个变量的长度 echo ${#array[a2]} => 4数组的截取,替换
array=(1 2 3 4 5 6) # 执行从所有数组元素中第二个元素向后截取2个元素。 echo ${array[*]:[2:2]} => 3 4 echo ${array[*]:[2:4]} => 3 4 5 6 # 替换数组的元素,并将结果返回给另一个变量 array1=${array[*]/6/5} # 将数组array中的6替换为5,然后将替换后的结果赋值给array1 echo ${array[*]}for循环遍历数组
# 常用的三种方法 array=(1 2 3 4 5) for i in ${array[*]};do echo $i done for i in ${!array[*]};do echo ${array[$i]} done for ((i=0; i<${#array[*]}; i++));do echo ${array[$i]} done -
使用
source以及.的方式执行脚本,则会加载脚本中的内容并执行。脚本执行完成后,环境变量将会影响到当前进程。 -
根据命令执行成功或者失败执行代码块
cmd || { } 或者 cmd && { } -
shell内置变量$UID用户ID值
-
控制脚本的执行
-
set -e只要脚本中命令的返回值不为0,则立刻退出脚本的执行。
-
-
判断字符串是否包含字符串
fileName=/home/sss/data/hk
if [[ $fileName =~ "hk" ]];then
echo "$fileName include hk"
else
echo "not include"
fi
-
字符串替换
line=`echo $line | sed 's/repo_list=//'` -
test,[],[[]],(())的区别-
边界都需要空格。比如
[[ $1 -eq 0 ]] -
字符串的比较都一样。
=, ==, != -
test以及[]的逻辑操作符为-a 代表and, -o 代表or !而
[[]],(())的逻辑操作符为&& , ||, ! -
只有
[[]]支持通配符。 -
整数比较操作符不一样
test 以及 []为-eq, -gt, -lt, -ge, -le[[]]任何格式都支持。(())只支持>,<,=,>=,<=
-
-
字符串变量操作
# 内容处理 # 获取变量字符串 ${str} # 获取字符串长度 ${#str} # 截取字符串 ${str:offset} # 从offset开始到结尾 ${str:offset:length} # 从offset指定长度截取 # 删除字符串 ${str#world} # 删除开头处最短匹配的world子串 ${str##world} # 删除开头处最长匹配的world子串 ${str%world} # 删除结尾处最短匹配的world子串 ${str%%world}# 删除结尾处最长匹配的world子串 # 替换字符串 ${str/pattern/string} # 替换第一个匹配的pattern ${str/pattern//string} # 替换所有匹配的pattern -
根据变量是否定义返回字符串
# 变量未定义则返回指定的字符,相当于默认值 ${str:-world} # str未定义则返回world ${str:=world} # str未定义则返回world并设置它 ${str:?world} # str未定义则,错误输出world并提出程序 ${str:+world} # str 有定义则赋值为world, 没有定义则什么也不干。 -
set的用法# 遇到不存在的变量是否忽略它执行 set -u # 打印执行的代码 set -x # 遇到退出码不为0则结束代码运行 set -e # 使用管道连接命令,只要有一个命令执行失败,则整个管道执行失败。不再执行后面的命令 set -eo pipefail -
select语法PS3="Enter a number: " # select 提示语句 select character in Sheldon Leonard Penny Howard Raj # select选项 do echo "Selected character: $character" # 选择的内容 echo "Selected number: $REPLY" # 输入的数字ID done -
获取当前路径
#!/usr/bin/env bash DIR=$(cd `dirname $0`; pwd)

浙公网安备 33010602011771号