大数据shell常用笔记

shell程序

第一行指定用哪个程序来编译和执行脚本 下面两个等价

#! /bin/bash 
#! /bin/sh

系统变量

  • 系统环境变量的位置
 /etc/profile
  • 系统用户变量的位置
find -type f -name '.bash_profile' #查找用户环境变量
source .bash_profile #重启用户  环境变量
  • 环境变量一般用大写字母表示

shell变量

  1. 一般shell变量赋值的时候不用带$,使用或者输出的时候需要带$,加减乘除的时候需要加入两层小括号,括号外面要有一个$,括号里面的变量可以不使用$,需要注意的是变量的赋值和变量的使用不能有空格。
  2. shell变量类型中只有整形和字符串
  3. shell变量表达式
表达式 说明
${#string} 计算$string的长度
${string:position} 从position处开始提取字符串
${string:position:len} 从position处开始提取长度为len的字符串
#!/bin/sh
a=10
b=20
c="this is a test"
d=$((a+b))
echo $c
echo "a="$a #输出a的值
echo $d
echo ${d} #也可以
echo $((a/b)) #0

echo "这是原始的字符串:"$c
echo '"${#c}" '${#c}
echo '"${c:5}" '${c:5}
echo '"${c:5:2}" '${c:5:2}

#! /bin/sh
echo "hello shell $1 $2 $3"

#$1,$2,$3可以接收外面传递的参数

./test.sh shanda beautiful

. test.sh shanda beautiful  
#输出结果 hello shell shanda beautiful   
#当其中有空格的时候,用双引号括起来  

$?:表示前面最后一个命令退出的状态
$$:脚本运行的当前进程号
$0:表示当前脚本名称
$1-$9:表示第一到第九个位置参量
$10:表示第10个位置参量
$#:表示位置参量的个数
$!:脚本运行的最后一个进程号

退出码

exit N 退出状态为0表示没有错误

exit N 退出状态大于0表示有错误

数组

arr=(math english  chinese)
#引用变量:${arr[0]}
#数组个数:${#arr[*]}
#所有元素:${arr[*]}
#数组赋值:arr[0]=hello

判断

需要注意的是使用[]时必须是每个变量之间都要有空格和左右中括号也要有空格。

test -e filename|[-e filename]:表示文件是否存在
test -d filename 判断文件是否是文件夹
test -f filename 判断文件是否是文件
test -r filename 判断是否有可读权限
test -w filename 判断是否有可写权限
test -x filename 判断是否有可执行权限
test n1 -eq n2 && echo "n1==n2" || echo "n1!=n2"判断n1是否等于n2
test n1 -ne n2 判断n1是否不等于n2
test n1 -gt n2 判断n1是否大于n2
test n1 -lt n2 判断n1是否小于n2
test n1 -ge n2 判断n1是否大于等于n2
test n1 -le n2 判断n1是否小于等于n2
test -z string 判断字符串是否为0 若string是空字符串返回为true  
test -n string 判断字符串是否非为0 若string是空字符串返回为false
test n1=n2 判断n1是否等于n2
或者是[ n1==n2 ]

if判断

多条件判断的时候可以使用&& 和||

if [条件];then
    当条件成立时候执行指令工作雷荣
    
fi表示结束if条件


if [条件];then
    do some things
elif [条件]; then
    do some things
else
    do some things
fi

循环

#!/bin/sh
for var in 1 2 3 4 5
do 
  echo ${var}
done
    
while 条件
do
 do something
done

break命令同样适用于shell语句,break跳出所有循环
break 表示跳出当前循环 默认值是1 表示跳出当前循环 也可以加入其他参数,表示跳出多层循环 break 2
continue 表示跳出当前循环 默认值是1

#!/bin/sh
for var in 1 2 3
do
  echo "1"
  for var1 in 3 4 5
    do
     break 2
    echo "2"
    done
done
#结果是 1 跳出了外层的循环
for var in 1 2 3
do
  echo "1"
  for var1 in 3 4 5
    do
     break 1
    echo "2"
    done
done
# 结果是 1 1 1

shell函数

shell函数的返回值只能是整数,一般用来表示函数的执行成功与否,0表示成功,其他值表示失败,如果return值返回的是一个字符串,会发生错误。

#!/bin/sh
printStr()
{
  echo "hello"
  return "fsdf"
}

printStr
#输出结果
#hello
#bash: return: fsdf: numeric argument required

猜你喜欢

转载自my.oschina.net/u/3798913/blog/1645079