大数据企业学习篇01之---Linux的那些事

来源:互联网 发布:王者荣耀 刘备 知乎 编辑:程序博客网 时间:2024/06/05 04:50

6.while read line
从文本中读取每一行
例子:

while read linedoecho "drop  table ${line}_bak;">>2.txt#echo "被删除的表为:"#echo ${line}'_bak'done < delete.txt

一.shell必知必会

1.变量  1)**变量的命名**:变量名必须以**字母或者下划线开头**,后面可以跟**数字、字母、下划线**,**任何其他字符**都标志变量的结束。  2)变量名关于大小写**敏感**。  3)**变量的类型**:变量可分为**本地变量**和**环境变量**,**本地变量**只在创建它的shell程序中有用,**环境变量**则在shell中的所有用户进程中有效,也被称为**全局变量**。按照惯例需要大写。  4)使用变量,只需要在已定义的变量前加$即可
name='xiaojiangshi'echo $name //xiaojiangshiecho ${name} //xiaojiangshi(推荐使用,{}用于识别变量的边界)
  5)修改(重新定义变量)  name='xiaojiangshi'  echo ${name} //xiaojiangshi  name='taobao'  echo $name   //taobao  ***注意:***只有在使用变量时才要加$,二次复制不需要  6)删除变量  echo $name //xiaojiangshi  unset name //删除变量  echo $name //空值

2.字符串
1)单引号

str='I am xiaojiangshi' //I am xiaojiangshi**注意:**单引号里的任何字符都会原样输出,单引号中不能出现单引号(转义后也不行)

2)双引号

str='xiaojiangshi'echo "hello,\"$str\"!" //hello,xiaojiangshi!

注意:双引号中可以有变量,又可以有转义字符

3)拼接字符串

name='xiaojiangshi'str1="hello,$name" //hello,xiaojiangshiage=18str2="your name is $age" //your name is 18echo ${str1} ${str2} //hello,xiaojiangshi your name is 18

4)获取字符串的长度

str="xiaojiangshi"echo ${#str}    //输出12

5) 提取子字符串

str="xiaojiangshi"echo ${str:1:4}  //输出iaoj

6)查找子字符串

str="xiaojiangshi"echo `expr index "$str" ao` //输出3

3.shell 数组
1)定义数组(用括号表示数组,数组元素用空格分隔)

arr=(1 2 9 10)echo ${arr[1]}  //输出2
或者arr(0)=1arr(1)=2arr(2)=9arr(3)=10

2)读取数组

echo ${arr[1]}  //输出2

输出所有元素:

echo ${arr[@]} //输出1 2 9 10

3)获取数组的长度

echo ${#arr[@]} //输出4

获得数组中单个元素的长度

echo ${#arr[1]} //输出1

4.位置参数
1)n,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推  
    例如:定义一个test.sh  
    #!/bin/sh  
    echo ”
0 ”
echo ” 1echo2 “

sh test.sh  xiaojiangshi hadoop hdfs 输出:test.sh xiaojiangshi hadoop

2)$# 传递参数的个数

sh test.sh  xiaojiangshi hadoop hdfsecho $#   //输出3

3)$? 显示最后命令的退出状态,0表示没有错误,其他任何值表示有错误。

sh test.sh  xiaojiangshi hadoop hdfsecho $?   //输出0

4.echo 显示命令的执行结果

echo `date` //输出Wed Nov 1 15:39:45 CST 2017

5.流程控制语句
1)if
if [条件判断式];then
command;
fi
或者
if [条件判断式];then
command;
elif [条件判断式];then
command;
else
command
fi
2)for
格式:for var in values
do
command
done

下面已计算1到10的和为例

#!/bin/shsum=0for ((i=1;i<=10;i++))   do       sum=`expr $sum + $i`doneecho $sum  //输出55

3)while
格式:while[condition]
do
command
done
以求1-10的和为例:

#!/bin/shi=1sum=0while(($i<=10))do        sum=$(($sum+$i))        i=$i+1doneecho $sum    //输出55

二.在Linux当中,自带的调度功能crontab

针对用户,每个用户都可以调度自己的任务
例如:在小僵尸用户下创建定时任务
1)每分钟执行一次,并将文件写入到指定文件中

*/1 * * * * /bin/date >> /home/xiaojiangshi/web.log

2)列出所有的定时任务

crontab -l

3)删除所有的定时任务

crontab -r

4)crontab的基本定义
语法:* * * * * command
第一列:分钟,取值范围为1~59
第二列:小时,取值范围为0~23
第三列:日, 取值范围为1-31
第四列:月, 取值范围为1-12
第五列:星期,取值范围为0-6(其中0表示星期天)
注意:(假设前5个星分别对应c1-c5)
1.当c1为* 表示每分钟执行,当c2为*时表示每小时都要执行
例如:每分钟执行一次test.sh这个脚本

* * * * * sh test.sh
2.当c1为T1-T2时,表示从T1分钟到T2分钟这段时间内执行,以此类推 例如:每天20:00到23:00执行,每半小时执行一次 */30 20-23 * * * sh test.sh3.当c1为a,b,c...表示第a,b,c...分钟要执行,以此类推 例如:每个月1,11,21 的2:30执行 30 2 1,11,21 * * sh test.sh4.当c1为*/n时,表示每分钟执行一次,以此类推 例如:每一小时执行一次 * */1 *  *  *  sh test.sh***干货:***0表示键盘输入1表示标准输出2表示错误输出
00 06 * * * source /etc/profile && cd /home/xiaoju/autosql/a && sh Main.sh > main.log 2>&1 &

解析:>main.log 2>&1 &
首先,左边的表示是标准输入重定向到文件main.log, 2>&1将错误输出重定向到标准输出,&表示放到后台运行。
注意(配置定时任务时):
1.在SHELL中设置了必要的环境变量;例如一个shell脚本手工执行OK,但是配置成后台作业执行时,获取不到ORACLE的环境变量,这是因为crontab环境变量问题,Crontab的环境默认情况下并不包含系统中当前用户的环境。所以,你需要在shell脚本中添加必要的环境变量的设置。
2.尽量所有的文件都采用完全路径方式,避免使用相对路径。

原创粉丝点击