shell小结(二)
1.Shell 既是一种命令语言,又是一种程序设计语言
2.Shell 脚本(shell script),是一种为 shell 编写的脚本程序
3.shell脚本第一行: #!/bin/sh
4.shell变量:
#注意: 变量名和等号之间不能有空格
my_name="Peanut"
#使用变量时,在变量名前加上$
echo $my_name
#只读变量
readonly my_name
#删除变量(不能删除只读变量)
myAge=10
unset myAge
5.shell字符串:
①字符串可以用单引号,也可以用双引号,也可以不用引号
②单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
str1='HelloWorld'
③双引号里可以有变量;双引号里可以出现转义字符
fruit_name='apple'
str="I like \"$fruit_name\"! \n"
④获取字符串长度
str2="orange"
echo ${#str2} # 4
⑤提取子字符串
str2="orage"
echo ${str2:1:3} # rag
⑥查找子字符串
str3="runoob is a great site"
echo `expr index "$string" io` # 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):4
6.shell数组:
①用括号来表示数组,数组元素用"空格"符号分割开
arr1=(value0 value1 value2)
②读取数组:${数组名[下标]}
arr1_value1=${arr1[1]}
echo ${arr1[@]} # 获取数组中的所有元素:@
③获取数组的长度:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
7.shell注释:
①# 表示注释
②一段代码用{}括起来,定义成一个函数,不调用就达到注释的效果
③多行注释:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
8.shell函数:
①可以带function fun() 定义,也可以直接fun() 定义,不带任何参数
②参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值
③调用函数时,直接写函数名,后面加上参数
function helloWorld(){
echo "第一个值为 $1" # 用
echo "第二个值为 $2"
echo "第十个值为 ${10}"
echo "参数总共 $#个" #传递参数的个数$#
echo "以一个字符串输出所有参数$*" #以一个单字符串显示所有向脚本传递的参数$*
}
helloWorld 1 2 3 4 5 6 7 8 9 10 11 12 13
function helloFruit(){
fruit1="apple"
fruit2="banana"
string=$fruit1,$fruit2 #字符串直接拼接,不需要加号双引号
echo $string #函数最后一句为返回值,如果用return,只能返回数值
}
result=$(helloFruit) #将函数返回值传给一个参数时,用$()
echo $result
result_array=(${result_identify//,/ }) #字符串按,分割成熟组
fruit1=${result_array[0]} #数组元素用 ${arr[i]}取值
fruit2=${result_array[1]}
9.shell随机数:
#伪随机数RANDOM
random1=$RANDOM
echo "$random1"
#唯一识别码Universally Unique Identifier,获得唯一不重复的随机数
psd="/proc/sys/kernel/random/uuid"
vRandom1=$(cat $psd)
echo "$vRandom1"
vRandom2=${vRandom1//-/} #去掉随机数中-
echo "$vRandom2"
10.其他:
匹配获取文件中数据
resultString=$(cat $home/data/fruit.txt | grep "apple.number")
用sed替换字符串
resultString2=$(echo $resultString|sed 's#apple.number#apple.weight#g')