参考
#! /bin/bash
它的作用就是告诉shell的脚本使用哪种解析器来执行的脚本(不指定系统默认使用当前的shell进行解释执行),shell有很多种常见的sh,bash,csh,tcsh,zsh等。这行很关键,少了就不能执行你的代码。
切割字符串
文本中数据格式为: a1
,
a2以逗号为分隔符。将逗号替换为空格,再定义数组对象即可。
filepath="… …"
while read line
do
array=(${line//,/ })
for var in ${array[@]}
do
echo $var
done
done < $filepath
array=(${line//,/})这里是空白,shell数组的声明使用空白来分离的:
${parameter//pattern/string}
用string来替换parameter变量中所有匹配的pattern
if后面的判断条件 方括号和之间的判断语句左右各要有一个空格
字符包含
注意的是if里面的双[[ == ]]
和双等于
if [[ $string =~ $sub ]]
if [[ s t r i n g = ∗ string = * string=∗sub* ]]
if [[ s t r i n g = . ∗ string =~ ^.* string= .∗sub.*$ ]]
巧妙的利用grep亦可:
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
echo "----------------------------------------------------------------------------"
json='{"jobs":[{"id":"ff6f61628a88e4d492e6b4f45788be06","status":"RUNNING"}]}'
if [[ $json == *'"status":"RUNNING"'* ]]
then
echo "RUNNING"
else
echo "FAILED"
fi
echo "----------------------------------------------------------------------------"
for循环遍历
arrays=(110 120 119)
for phone_num in ${arrays[@]}
do
echo $phone_num
done
sed操作文本
sed直接操作文本需要加一个-i
,即保存修改文本。
sed不可直接操作空文本
,建议判断后:wc -l file.txt 是否为0,后赋予内容echo ‘’ >> file.txt ,再操作。
sed中$
表示最后:
sed -i '$a\insert into last row' file.txt
未加-i
sed '3d' params2.txt
cat
加入-i
sed -i '1c\hello world' params2.txt
cat
配合readline
filepath=略
index=0
while read line
do
((index++))
sed -i ${index}'c\dynamic' ${filepath}
done < ${filepath}
echo 'index='$index
输出结果:index=文本行数,且每个文本行被改变
其它扩展
这里的acdi等是指的是行数后面的参数:
sed -i ‘$a
\insert into last row’ file.txt
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
- 引用来源菜鸟教程
Shell自增
- i=
expr $i + 1
;
2. let i+=1;
3. ((i++));
4. i= [ [ [i+1];
5. i=$(( $i + 1 ))