Shell脚本重新学习
#!/bin/bashshell的两种运行方式
改变权限chmod u+x
运行时指定解释器
shell变量
变量类型
访问变量
$、${}
只读变量
readonly
删除变量
unset取消变量,但不能取消只读变量
myUrl="http://lingdandan.blog.51cto.com"
unset myUrl
echo $myUrl
运行结果:
myUrl="
readonly myUrl
unset myUrl
echo $myUrl
运行结果:
shell字符串
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号
单引号中的字符都会原样输出
单引号中间不能有单引号(转义字符也不行)
双引号
双引号里面可以有变量
单引号可以有转义字符
字符串拼接
LANGUAGE=English
echo "hello ${LANGUAGE}"
字符串长度计算
echo ${#VAR}
echo ${VAR} | wc -c
echo $TEST_SHELL_VAR | awk '{print length ($0)}'
提取子字符串
#*字符
##*字符
%字符*
%%字符*
VAR代表变量
${VAR:0:10}表示从左边第一个字符开始之后的10个字符
${VAR:7} 表示从第七个字符开始之后的所有字符
${VAR:0-3:10} 表示从右边数的第三个字符开始之后的10个字符
${VAR:0-14}表示从右边数的第14个字符开始之后的所有字符
查找字符串
Shell数组
数组定义
bash只支持一维数组,不支持多维
下标从0开始,可以是整数或者表达式
arr=(值1 值2 值3) 圆括号 空格隔开
也可以单独定义各个分量
数组读取
${arr[下标]}
使用@可获得数组的所有元素
获取数组长度
${#arr[@]}
${#arr
[*]}
shell传参
脚本内获取参数的格式:$n
$0 $1 $2
$*和$@都是引用所有参数,它们的区别在于$*把参数当作一个字符串,$@把参数当作一个一个的字符串
$*"1 2 3" 只传了一个参数
$@"1" "2" "3"传来三个参数
shell基本运算
原生的bash不支持简单的算术运算,可通过别的命令如awk和expr来完成
算数运算
+ - * / % = == !=
VAR=`expr 3 \* 5`
关系运算符
-eq -nq -gt -lt -ge -le
关系运算符只支持数,不支持字符串
字符串运算
= != -z-n str
exprhttp://lingdandan.blog.51cto.com/10697032/1791485
expr match 字符串 表达式 expr 字符串 : 表达式
expr index 字符串 字符
expr length 字符串
expr substr 字符串 偏移量 长度(偏移量从1开始)
布尔运算
! -o -a
逻辑运算符
&& ||
文件测试运算符
[ -f file ] -d-b-c-p-r-w-x-s(文件是否大于0)-e(目录或文件是否存在)
shell echo命令
1、echo "str"
echo str
2、echo "\"str\""
3、echo -e "hello \nworld" #-e开启转义 换行
4、echo -e "hello \c" #-e开启转义 不换行 抑制输出结果中的换行字符
echo "world"
5、echo "$var is good!"
6、echo "hello world" >file
7、echo '$var is good!' #原样输出字符串不进行转义,使用单引号
8、echo `date`#显示命令结果
shell printf
默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n
语法:printf 格式控制字符串 参数列表
shell test命令
数值测试 -eq -ne -ge -le -gt -lt
字符串测试 = != -z -n
文件测试 -d -f -c -b -r -w -x -e -s
shell 流程控制
if
for
for 变量 in 列表
do
done
for var in list1 list2 list3...
do
command
done
或者写成一行for var in list1 list2;do command1;command2; done;
while
until
case
break
continue
shell函数
func[()]
{
action
}
函数返回值,可以显示的加return,如果不加将以最后一条命令的结果,作为返回值,
return后面跟的数为0-255
下图为加return和不加return的区别
return的范围
函数参数
在函数内部通过$1 $2 $3 ...${10}... 来获取参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 当前进程的ID
$! 后台运行的最后一个进程ID
$@ 和$*相同
$- 记录当前设置的shell选项 himBH是默认值 http://kodango.com/explain-shell-default-options
$? 获取退出码
shell输入输出重定向
command >file 将输出重定向到file
command >file将输出追加到file
n >file 将文件描述符为n的文件重定向到file
n >>file 将文件描述符为n的文件追加到file
n >&m 将输出文件m和n合并
n
页:
[1]