Linux_shell(二)

变量

  • 环境变量(局部变量)
    所有的场景都能用
    /etc/profile文件 source一下

  • 局部变量
    只能在自己的shell函数或脚本中使用

变量定义

定义变量的三种方式:

  • 直接定义
    直接写。输出的时候是什么就是什么
  • 单引号
    输出的时候完全按照内容输出,不解析任何符号
  • 双引号
    输出的时候解析内容
    适合字符串中含有变量的内容的形式。
echo '${a}'       #输出的是${a}
echo "${a}"      #输出的是变量a的内容,是解析过的值

# 如果想输出特殊字符,必须要用到''单引号
echo '$'${a}
# 输出的是$和解析后的变量a的内容

echo `date`       # 输出当前时间
echo `date +%F`    输出各种时间。
# date + %FHSDM  都是输出时间的一部分,可以指定

习惯上数字不加引号,其他默认加双引号(尤其是在字符串中含有空格的情况下)
学习脚本的时候,多参考系统的默认脚本,是非常规范,具有参考性的。

用变量打包命令:

cmd="$(date)"
echo ${cmd}

特殊变量

$0{0} 当前脚本的名字
${1}  传入的第一个参数
${n}  获取当前执行的脚本的第n个参数
${*}  所有的参数。输出的时候把参数当做一个整体。
> "pa1 pa2 pa3"
${@}  所有的参数。输出的时候把参数当做单个的数据。
> "pa1" "pa2" "pa3"
${?}  上一步是否成功执行
${#}  参数的个数
${$}    获取当前进程的号
${!}     上一个进程的PID
${_}    上一个脚本的参数
${?}        # 判断上一个命令是否成功执行。

$?是最常用的,上次成功执行输出0,否则输出127

变量替换表

考察变量定义了与否。
定义了—>返回定义值,返回设定的值
|—>返回null,返回word。

# **牢记**
${value:-word}    value定义了,就返回value,否则返回word
${value:=word}    value定义了,就返回value,否则设置valueword
${value:? "not defined"}    value定义了,返回定义值,否则显示变量名。
${value:+word}    value定义了,返回word,否则返回null

变量计算

(()) 执行简单的整数计算
简答的加减乘除# bash的内部变量

# 简单计算
((a=5**3-5))
echo ${a}
echo ${((5**3-15))}
echo $((a++))
echo $(())
echo $((450>333))      # bool,输出的是0/1
num=100
echo $((  ${num}-1  ))

a=$1
b=$2
echo $(( $a+$b ))

字符串

常用操作:

${#string}                      返回string的长度
${string:position}          返回从pos位置开始的子串
${string:p1:length}        返回从p1开始,长度为len的子串
${string#substring}       从开头删除最短匹配的substring
${string##substring}     从开头删除最长匹配的substring
${string%}                    从结尾删除最短匹配的substring
${string%%}                 从结尾删除最长匹配的substring

数组

数组的定义是用 ( )。
里面只用空格分开。

# 数组的定义
shuzu=(1 2 3 4 5)
echo ${shuzu[@]}     # 输出数组的每个元素
echo ${#shzuh}      # 输出数组的长度
echo ${shuzu[n]}    # 输出数组中第n个元素

运算符

if [ $a -ne $b ]
then echo xxx
else echo yyy
fi
  • 布尔运算符

    • !返回非操作
    • -o 或操作的结果
    • -a 与操作的结果
  • 逻辑运算符

    • && 与
    • || 或
  • 加减乘除

  • 比较运算符

    • 关系运算符(返回bool值)
    • -eq 是否相等
    • -ne 是否相等
    • -gt 左大于右
    • -lt 左小于右
    • -ge 左大于等于右
    • -le 左小于等于右

循环控制

if

if/elif后一定要有then

if [ xx ]
then xxx
elif [ xx ]
then xxx
else xxx
fi

case

类似switch case结构。

case judge in
模式1)    x1
模式2)    x2
模式3)    x3
模式4)    x4
esac

for

循环结构

for val in seq
do 
xxx
done

while

while xxx
do 
xxxxxx
done

until

until xx
do 
xxxx
done

函数

// 定义
function_name(){
xxx
return value
}

// 使用
function_name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值