Linux Shell介绍

spark,hadoop交流群,QQ群号:521066396,欢迎加入共同学习,一起进步~

1、shell脚本

Shell是用户与Linux操作系统沟通的桥梁
Linux的Shell种类众多,常用的有bash,也就是Bourne Again Shell
1、由于易用和免费,Bash在日常工作中被广泛使用
2、Bash是大多数Linux系统默认的Shell。
3、文件名后缀通常是.sh

#!/bin/bash
# 表示注释

在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在这里,我们可能看到#!/bin/bash,它同样也可以改为#!/bin/sh
4、脚本执行的方式有:./a.sh,/usr/local/a.sh等
只要保证这个脚本具有执行权限即可

2、变量

1、变量不需要声明,初始化不需要指定类型(弱类型)
变量命名规则:
(1)只能使用数字,字母和下划线,且不能以数字开头
(2)变量名区分大小写
(3)建议命令要通俗易懂
注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。
2、显示变量值使用echo命令,加上 3使 {变量名}
例如:echo $JAVA_HOME
或者echo ${JAVA_HOME}
4、变量分类
(1)本地变量
只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效。
定义:VAR_NAME=VALUE
变量引用:${VAR_NAME}
取消变量:unset VAR_NAME
(2)环境变量
自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效
定义:export VAR_NAME=VALUE
对所有shell进程都有效需要配置到配置文件中
vi /etc/profile
source /etc/profile
和windows中的环境变量比较类似
(3)局部变量
在函数中调用,函数执行结束,变量就会消失
对shell脚本中某代码片段有效
定义:local VAR_NAME=VALUE
(4)位置变量
$1,$2,…..${10}….
test.sh 3 89
$0表示脚本自身
$1表示脚本的第一个参数
$2表示脚本的第二个参数
(5)特殊变量
$?:接收上一条命令的返回状态码,返回状态在0-255之间
$#:参数个数
$*:或者$@:所有的参数
$$:获取当前shell的进程号(PID)

3、单引号、双引号、反引号区别

(1)单引号不解析变量
echo ‘$hello’
(2)双引号会解析变量
echo “$hello”
(3)反引号是执行并引用一个命令的执行结果,类似于$(…),位于数字键1的左边
echo $hello`

4、条件判断

1、条件测试
(1)bash条件测试
命令执行成功与否即为条件测试
格式:test EXPR
[ EXPR ]:注意中括号和表达式之间的空格
(2)整型测试:
-gt:大于:例如[ $num1 -gt $num2 ]或者test $num1 -gt $num2
-lt:小于
-ge:大于等于
-le:小于等于
-eq:等于
-nq:不等于
(3)字符串测试:
=:等于,例如判断变量是否为空 [ “ str"=""][z str ]
!=:不等于
2、if判断
(1)单分支

 if 测试条件;then
  选择分支
 fi

(2)双分支

 if 测试条件
  then
   选择分支1
   else
   选择分支2
   fi

(3)多分支

    if 条件1; then
        分支1
    elif 条件2; then
        分支2
    elif 条件3; then
        分支3
        ...
    else
       分支n
    fi

3、case判断
(1)有多个测试条件时,case语句会使得语法结构更清晰
格式:

case 变量引用 in
    PATTERN1)
        分支1
        ;;
    PATTERN2)
        分支2
        ;;
        ...
        *)
        分支n
        ;;
    esac

(2)PATTERN :类同于文件名通配机制,但支持
使用|表示或者a|b:a或者b
*表示匹配任意长度的任意字符
?表示匹配任意单个字符
[a-z]:指定范围内的任意单个字符

5、循环

1、for循环
(1)通过使用一个变量去遍历给定列表中的每个元素,在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环
(2)格式1

for ((i=0;i<10;i++))
do
  ...
done

(3)格式2

for i in 0 1 2 3 4 5 6 7 8 9
do
...
done

(4)格式三

for i in {0..9}
do
  ...
done

注意:for i in {0..9} 等于for i in {0..9..1}
2、while循环
(1)适用于循环次数未知,或不便用for直接生成较大的列表时
(2)格式:

while 测试条件;do
  循环体
done

(3)如果测试条件为“真”,则进入循环,测试条件为假,则退出循环。
3、循环控制命令-break
(1)break命令是在处理过程中跳出循环的一种简单方法,可以使用break命令退出任何类型的循环,包括while循环和for循环
1表示跳出单循环
2表示跳出内循环
(2)使用多循环时break命令自动终止你所在的最里面的循环,注意,当内循环被break命令终止,外循环会继续执行。
3表示跳出外循环
可能有时处于内循环但需要停止外循环,break命令后面就需要指定一个参数了
break n
n表明要跳出的循环级别,默认情况下,n是1,代表跳出当前循环,如果将n设置为2,break命令将停止外循环的下一级循环。
4、循环控制命令-continue
continue命令是一种提前停止循环内命令,而不完全终止循环的方法,这就需要在循环内设置shell不执行命令的条件

6、常用的运算与操作

1、字符串操作
获取长度:${#VAR_NAME}
字符串截取
${variable:offset:length}或者${variable:offset}
取尾部的指定个数的字符
${variable: -length}:注意冒号后面有空格
大小写转换
小–>大:${variable^^}
大–>小:${variable,,}
2、数组
(1)定义:declare -a:表示定义普通数组
(2)特点
支持稀疏格式
仅支持一维数组
(3)数组赋值方式
一次对一个元素赋值a[0]=$RANDOM
一次对多个元素赋值a=(a b c d)
按索引进行赋值a=([0]=a [3]=b [1]=c)
使用read命令read -a ARRAY_NAME
(4)查看元素
${ARRAY[index]}:查看数组指定角标的元素
${ARRAY}:查看数组的第一个元素
${ARRAY[*]}或者${ARRAY[@]}:查看数组的所有元素
(5)获取数组的长度
${#ARRAY[*]}
${#ARRAY[@]}
(6)获取数组内元素的长度
${#ARRAY[0]}
(7)注意:${#ARRAY[0]}表示获取数组中的第一个元素的长度,等于${#ARRAY}
(8)从数组中获取某一片段之内的元素
格式: ${ARRAY[@]:offset:length}
offset:偏移的元素个数
length:取出的元素的个数
${ARRAY[@]:offset:length}:取出偏移量后的指定个数的元素
${ARRAY[@]:offset}:取出数组中偏移量后的所有元素
(9) 数组删除元素:
unset ARRAY[index]
3、算术运算
let varName=算术表达式
varName=$[算术表达式]
varName=$((算术表达式))
varName=expr $num1 + $num2
使用这种格式要注意两个数字和+号中间要有空格。
4、自定义函数

function 函数名(){
  ....
}

引用自定义函数文件时,使用source func.sh
调用:test (args)
有利于代码的重用性
函数传递参数
函数的返回值,只能是数字
5、帮助命令
(1)help/man
(2)inux中的命令可以分为两种
内建命令:command is a shell builtin
外部命令:显示具体的路径
(3)如何区分命令属于哪一种
type command
(4)内建命令使用help command
(5)外部命令使用man command
6、date
显示当前时间
格式化输出 +%Y-%m-%d
格式%s表示自1970-01-01 00:00:00以来的秒数
指定时间输出 –date=’2009-01-01 11:11:11’
指定时间输出 –date=’3 days ago’ 三天前,-2 days ago 两天后
7、read
read命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。
格式
read VAR_NAME
read如果后面不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中
read -p “Enter your name:” VAR_NAME
read -t 5 -p “enter your name:” VAR_NAME //5秒之后不输入自动结束
read -s -p “Enter your password: ” pass //输入看不到
8、declare
用来限定变量的属性
-r 只读
-i 整数:某些算术计算允许在被声明为整数的变量中完成,而不需要特别使用expr或let来完成。
-a 数组
9、后台模式运行脚本
(1)在脚本后面加一个&
test.sh &
这样的话虽然可以在后台运行,但是当用户注销(logout)或者网络断开时,终端会收到Linux HUP信号(hangup)信号从而关闭其所有子进程
(2)nohup命令
不挂断的运行命令,忽略所有挂断(hangup)信号
(3)使用nohup test.sh &
nohup命令将进程和终端分开,所以关闭当前会话窗口不会影响这个进程的执行。
nohup会在当前执行的目录生成一个nohup.out日志文件
10、标准输入、输出、错误、重定向
(1)标准输入、输出、错误可以使用文件描述符0、1、2引用
(2)使用重定向可以把信息重定向到其他位置
ls >file 或者 ls 1>file(ls >>file)
lk 2>file(lk是一个错误命令)
ls >file 2>&1(同时保存错误输出和标准输出)
ls > /dev/null(把输出信息重定向到无底洞)
(3)例子:command >/dev/null 2>&1

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值