1、shell中的变量、控制、循环基本语法
什么是shell 呢? shell 就是以文件的形式批量的存储Linux命令的集合,该文件能够被Shell解释执行,这既是Shell脚本程序。
shell的第一行:指定用哪个程序来编译和执行脚本 #!/bin/bash 或者 #!/bin/sh 两者是一致的! sh 是bash 的一个软连接。
1、1 : 变量:
1、变量名必须以字母或者是下划线开头,后面可以跟字母、数字下划线 。
2、变量的赋值,变量对于对大小写比较敏感! 定义名称的时候等号两边千万不能有空格 ! $ name=vincent √ $name = vincent × 如果想要赋空值,就给变量赋一个换行符。
3、变量名的引用: 使用echo $name 或者是 ${name} 加不加{}都一样
4、清除变量 :unset name
5、显示当前用户的所有的变量 : set
6、变量是有作用域的,分为本地变量和全局变量(环境变量),全局变量分为全局的环境变量和用户的环境变量 , 变量名全部惯例为大写。
! 比如你在窗口一中创建的变量,在窗口二中是不能使用的。这个变量是本地变量 还有一个全局环境变 量! 是存在/etc/profile 这个文件中的变量。 另外在 ~ 这个目录下面的 .bash_profile ,这个目录中的 是用户的环境边变量。
1、2 : 位置参量:sbin/hadoop-deamon.sh start namenode 这个start namenode 就是一个位置参量。
1、位置参数是一组特殊的内置变量,通常被shell脚本用来从命令行接受参数,或被函数用来保存传递给它额参数。
2、执行 shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本名后面的用空格隔开的每个字符串都称为位置参数。
3、在脚本中使用这些参数的时候,需要通过位置参数来引用,例如:$1 表示第一个参数,$2 表示第二个参数! ${10} 就得使用{} 将10包裹进行传递了。如果位置参数中有空格的!需要用引号引起来!
$0 : 表示当前执行脚本的名称! 三种执行方式获取的不一样1、 .shname.sh 2、 ./shname.sh 3、 sh shnam.sh
$1-$9 :第一个到第九个位置参数。
$# : 位置参数的个数
$* :以单字符串显示所有的位置参数
$@ :未加双引号时候与$*含义相同,加双引号的时候有区别
$$ : 脚本运行的当前进行号
$! : 最后一个后台运行额进程的进程号
$? :显示前面最后一个命令的退出状态。 0 表示没有错误,其他任何值表示有错误
1、3 :shell中的数组、date、cal命令详解 :
定义数组: arr=(zhangsan lisi wangwu)
引用 :echo ${arr[0]} echo ${arr[*]} :查看所有 echo ${#arr[*]} :查看有多少个值 。 arr[0]=vincent :修改值
date的详解:date man 查看日期的详解 如何在shell中引用日期 :
1、date=$(date +%Y-%M-%d) :
echo ${date} 获取当前的系统时间 以 年-月-日的形式获取
2、date2=$(date --date='2 days ago' +%Y-%M-%d )
echo $(date2) 获取当前日期往前推两天的时间
3、date3=$(date --date='-1 days' +%Y-%M-%d )
echo $(date3) 获取当前日期往后推一天的时间
cal : 获取 日历 :
1、cal 获取当前月份的日历
2、cal 2018 :获取2018年的所有的日历
3、cal 12 2018 : 获取2018年12月份的日历。
1 、4 : shell中的判断表达式以及if的使用 :
判断 : shell中 [] 就是一个判断符号, 就代表这test 判断的意思
test -e filname 判断文件是否存在
-e:该文档是否存在
-f :该文件是否存在切是否为file
-d:该文件是否存在且该文件是否为目录?
test -r filename :判断文件是否有课读权限 -w -x 同理。
判断还有很多!
if 的使用 :
第一种: if [ -判断条件 "需要判断的文件"] ;then
如果为true 就执行then下面的 句子。
fi
第二种: if [ 条件判断式 ] ; then
当条件成立的时候,可以进行指令工作内容;
else
点条件判断式不成立的时候,可以进行的指令工作内容;
fi
第三种:if [ 条件判断式 一] ; then
当条件成立的时候,可以进行指令工作内容;
else [ 条件判断式二 ] ; then
条件判断式成立的时候,可以进行的指令工作内容;
else [ 条件判断式三] ; then
条件判断式成立的时候,可以进行的指令工作内容;
else
当条件判断式一、二、三都不成立的时候执行的语句;
fi
for循环和while循环 :
#第一种方式
for var in 1 2 3 4 5 6
do
echo ${var}
done
#第二种方式
num=10
s=0
for((i=0;i<${num};i=i+1))
do
s=$((${s}+${i}))
done
echo ${s}
#第一种
while [ 条件判断式 ]
do
程序段落
done
#第二种
until [ 条件判断式 ]
do
程序段落
done
#一行一行的去读取文件
cat ${filename} | while read line
do
${line}
done
#或者是
cat `ls ./*.txt` | while read line
do
echo ${line}
done