shell script学习笔记6

时间:2022-12-21 00:13:52

如何将文本添加到文件开头?

(>>可以添加到结尾)

echo "I want to be the first one" | cat - file.txt > file.txt


测试变量是否是整数?
1)正则表达式来匹配
2)
test "$1" -ne 0 -o "$1" -eq 0 2>/dev/null
if [ $? -eq 0 ]
then
    echo "integer"
else
    echo "not integer"
fi


函数返回值的范围是0-255,如果要返回其他值,可以使用全局变量,或者使用echo将返回结果输出到stdout
传递与返回数组:
pass_array()
{
local array
array=(`echo "$1"`)
...
echo "${array[@]}"
}
returned_array=(`passarray "a b c"`)


一些数组操作:

declare -a area2
area2=(zero one two three four five five)
# 数组赋值的时候,把换行符变为空格(换行和空格同为分隔符)
area[1]="hello"
area[3]="bing"
area[5]="sun"
array_name([1]="jack" [4]="joe" [6]="alex")
bash运行将变量当做是数组来操作,例如:
string="abcdefg"
echo "${string[*]}" # abcdefg
echo "${string[1]}" # 没有输出
echo "${#area2[*]}" # 数组长度
echo "${#area2[1]}" # 元素1的长度
echo "${#area2}" # 如果不带index,那就默认是元素0!, 等价 ${#area2[0]}
echo "${area2[1]:0:2} # on
echo "${area2[@]:0:2} # zero one two three four five five, 如果用array[*]或者array[@]那就是对整个数组进行操作!
${area2[@]#o*e} # zero two three four five five 变量的操作也都支持
${area2[@]##o*e} # zero two three four five five 这里需要注意这里匹配的是每个元素,不能够跨元素匹配
${area2[@]/five/YY} # zero two three four YY YY 这里需要注意这里匹配的是每个元素,不能够跨元素匹配!
${area2[@]//five/YY} # zero two three four YY YY 这里需要注意这里匹配的是每个元素,不能够跨元素匹配!注意和上面操作效果一样
${!area2[@]} # 0 1 2 3 4 5 6
area2=("${area2[@]}" "six") # 扩展数组
*和@效果是相同的,但是使用时加引号,*则作为一个整体字符串返回;@则是多个单独的字符