Shell函数操作
echo
#! /bin/bash
echo “Hello World !”
如何运行shell文件
终端输入
`sh 脚本的文件名.sh`
变量
定义变量
注意:等号两边不能有空格,否则会识别成指令
variable=”some value”
让变量只读
readonly variable
删除变量
unset variable_name
使用变量(前面需要加美元符号)
echo $variable
echo $(variable)
脚本参数
传递参数:
在终端输入
`sh 脚本的文件名.sh 参数1 参数2 参数3`
获取第0个参数
param1=$0
获取参数个数
args_count=$#
获取所有参数 “参数1 参数2 参数3″表示
args=$*
获取所有参数 “参数1” “参数2” “参数3″表示
args2=$@
显示当前进程ID
pid=$$
后台运行的最后一个ID号
last_pid=$!
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
exit_state=$?
if
注意必须以`fi`结尾
if
if condition
then
command
fi
if – else
if condition
then
command
else
command
fi
if – elif – else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for
for var in item1 item2 … itemN
do
command
done
写成一行
for var in item1 item2 … itemN; do command;done;
while
while condition
do
command
done
until
与`while`相反
until condition
do
command
done
case
必须以`esac`结尾每个分支有两个分号,`*)`表示不匹配的分支
case $aNum in
1) echo ‘你选择了 1’
;;
2) echo ‘你选择了 2’
;;
3) echo ‘你选择了 3’
;;
4) echo ‘你选择了 4’
;;
*) echo ‘你没有输入 1 到 4 之间的数字’
;;
esac
shell支持break和continue
函数
funWithReturn(){
read aNum
read anotherNum
return $(($aNum+$anotherNum))
}
函数获取参数的方法与脚本获取参数方法一致
引入其他脚本
使用`.`符号引入其他sh脚本
. ./test1.sh
或者使用source
source ./test1.sh
字符串
字符串插值
echo “${variable}”
字符串长度
length=${#variable}
子串
echo ${string:1:4}
字符串拼接
variable =”hello, “$your_name” !”
echo $greeting $variable
字符串可以使用单引号
单引号的字符串无法插值,并且无法用转义字符
数组
定义数组
array_name=(value0 value1 value2 value3)
数组赋值
array_name[0]=value0
数组长度
length=${#array_name[0]}
获取数组所有元素
echo “${my_array[*]}”
echo “${my_array[@]}”
关系运算符
算数运算符
– `+`,`-`,`*`,`/`,`%`,`=`,`==`,`!=`
关系运算符
`-eq` 相等?
`-ne` 不等?
`-gt` 大于?
`-lt` 小于?
`-ge` 大于等于?
`-le` 小于等于?
布尔运算符
`!` 非
`-o` 或
`-a` 与
逻辑运算符
`&&` 逻辑与
`||` 逻辑或
字符串运算符
`=` 相等?
`!=` 不等?
`-z $str` 长度为0?
`-n $str` 长度不为0?
`$str` 为空?
文件测试运算符
`-d $file` 目录?
`-f $file` 普通文件?
`-r $file` 可读?
`-w $file` 可写?
`-x $file` 可执行?
`-s $file` 0字节?
`-e $file` 是否存在
Shell重定向
`command > file` 将输出重定向到file
`command < file` 将输入重定向到file
`command >> file` 将输出追加到file
`n > file` 将文件描述符为 n 的文件重定向到 file
`n >> file` 将文件描述符为 n 的文件以追加的方式重定向到 file
`n >& file` 将输出文件 m 和 n 合并
`n <& file` 将输入文件 m 和 n 合并
`<< tag` 将开始标记 tag 和结束标记 tag 之间的内容作为输入
更多命令参考