shell学习笔记

列表结构

与列表:

command-1 && command-2 && command-3 && command-4 一个命令返回真值(0)后再执行下一个命令, 返回假值立即退出

如: 输出输入的参数

if [ ! -z "$1" ] && echo "Argument #1 = $1" && [ ! -z "$2" ] && echo "Argument #2 = $2" 

或列表:

command-1 || command-2 || command-3 || command-4 一个命令返回假值(非0)进行执行,返回真值(0)退出

如: ( false && true ) || echo false 


函数

函数格式为:

function function_name()

{

command ~~~

}


注意:函数定义必须在第一次调用函数前完成.没有像 C 中的函数“声明”方法. 如:

#!/bin/bash
#函数没有声明, 定义必须在使用之前

f1

declare -f f1 #声明是无效的

f1

f1() {
	echo "calling f2 from function1"
	f2
}
f2() {
}


函数的输入参数与返回参数

function_name $arg1 $arg2

函数以位置来引用传递过来的参数(就好像他们是位置参数(positional parameters)), 例如$1, $2,以此类推 

#!/bin/bash

DEFAULT=default

func2(){
	if [ -z "$1" ]
	then
		echo "-parameter #1 is zero length."-
	else
		echo "-param #1 is "$1".-"
	fi
	
	variable=${1-$DEFAULT}
	echo "variable=$variable"
	return 0
}


echo 

echo "Nothing passed."
func2
echo 

echo "zero-length passed"
func2 ""
echo 

echo "null parameter passed"
func2 "$unitinalize"
echo 

echo "one param pass"
func2 first
echo

传递间接引用给函数

采用${!variavle}的形式传递间接引用

#!/bin/bash

echo_var()
{
	echo "$1"
}

message=hello
hello="how do you do"

echo_var "${!message}"

hello="hello again!"
echo_var ${message}
echo_var "${!message}"

返回值

return可以有选择的带一个整形的返回值, 这个值可以返回给调用这个函数的脚本, 也就是给$?, 但是最大返回值是255.

如何返回字符串或者数组, 使用函数外部的一个可见变量:

#!/bin/bash

count_lines(){
	[ -r /etc/passwd ] && REPLY=$(echo $(wc -l < /etc/passwd))
}

if count_lines
then 
	echo "there are $REPLY line"
else
	echo "can not find"
fi

局部变量

local

函数输入的重定向

function_name(){

command;command

}<file


数组

说明 表示
表示整个数组 ${array[*]} or ${array[@]}
数组中元素的个数

${#string[@]}  or ${#string[*]}

第一个元素的第一个字符输出

 ${array:1}

输出第一个元素的长度 ${#array[0]} or ${#array}


数组声明与访问

//直接声明, 声明的数组可以不连接, 允许存在空值, 一部分成员允许不被初始化
array[12]=34
array[23]=45
array[34]="China"
echo  ${array[*]}//输出整个数组
echo  ${array[0]}//输出空行
echo ${array[34]}
 
//数组元素运算
array[1] =  `expr ${array[12]} + ${array[23]}`
echo -n ${array[1]}
 
//通过括号声明数组
num=( 1 2 3 4 5 6 )
echo ${num[@]}
 
//通过键值对声明数组
price=(["rice"]=12 ["apple"]=24) #不支持键值是非数字的
echo -n ${price[*]}
 
//通过命令返回生成数组
array=`seq 1 10`
 
//使用declare -a  声明数组
 
 

字符串操作用于数组操作

一般来说,任何类似 ${name ... } 写法的字符串操作符,都能在一个数组的所有字符串元素中使用 像${name[@] ... } 或 ${name[*] ...} 的写法 .

numb=(one two three four five five six seven eight)
 
#提取尾部的字符串
echo ${numb[@]:0} # 输所有
echo ${numb[@]:2} # 输出第二个及以后元素
echo ${numb[@]:1:2} #第一个元素后面两个
 
#子串删除:从前部删除最短的子串, 匹配子串是一个正则表达式 
#  #  ## % %%
echo ${numb[@]#t*e}
echo ${numb[@]##t*e}
 


#子串替换 //str/repl  /#str/repl  /%str/repl /str/repl
echo "-----------子串替换----------"
echo -n "所有ive换成OOO:"
echo ${numb[@]//ive/OOO}
echo -n "第一个ive换成OOO:"
echo ${numb[@]/ive/OOO}

echo -n "替换最前部出现的fie换成ooo"
echo ${numb[@]/#fi/OOO}
echo -n "替换最后步出现的字符ee->OOO"
echo ${numb[@]/%ee/OOO}
 
 
 

终端输入字符串数组

 #!/bin/bash                                                                                                                          
declare -a colours
read -a colours
echo -n "输入的colours:"
echo ${colours[@]}
colour_num=${#colours[@]}
index=0
echo $colour_num
while [ "$index" -lt "$colour_num" ]
do
	echo ${colours[$index]}
     ((index ++))
done

数组复制与元素添加

#!/bin/bash
 
number1=`seq 1 10`
number2=("$number1[@]")
echo -n '原有数组number1:'
echo ${number1[*]}
echo -n "复制后的数组number2:"
echo ${number2[*]}
 
numberAdd=("${number2[@]}" "add element")


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值