基础shell语句

说明

生产环境中, 固定流程的任务往往会以脚本的形式定时运行
shell语句可以用于在linux中写脚本

变量

一门语言的入门, 最先接触的就是变量

  1. shell中的变量不需要提前声明, 可以直接使用
name="carney"
# 变量名和等号之间,不能有空格
  1. 可以使用语句给变量赋值
  2. 使用双引号调用shell指令
    返回的就是该指令运行后显示在控制台上的字符串
myname=`/bin/date -d "1 day ago" +%Y-%m-%d`
hostname=`/bin/hostname`
echo ${myname}:${hostname}
# echo hostname
  1. 如果是使用.sh文件调用的shell, 使用$1可以获取到在跟随在命令行之后输入的字符串
args=$1
echo ${args}
  1. 删除变量和readonly:可以将变量声明为readonly, 使变量不可修改
    注意到, unset和readonly这两个指令, 都不需要在变量前加$
name="carney"
readonly name
name="willson"
# 会报错
unset name
# 也无法删除变量
字符串

name=‘carney’

  1. 单引号原样输出
  2. 双引号中可以引用变量
  3. ${#name}可以获取变量对应字符串的长度
  4. ${name:1:2}截取输出ar, 比较特殊, 包括前后的
数组

arr=(1 2 3 4 5 6 7)

  1. 使用()定义数组, 使用(空格)分隔元素
  2. 角标不会越界
  3. 使用${#arr[@]}查看数组长度
运算
  1. 数学运算应该放在双括号, 或者中括号中
a=$(( 3 + 3 ))
echo $a
b=$[ 3 + 6 ]
echo $b
  1. 布尔运算和数学运算一样, 而且返回值是0和1
a=$(( 3 == 3 ))
echo $a
# 1
b=$[ 3 == 6 ]
echo $b
# 0
x=3
y=3
c=( $x -eq $y )
echo $c
# 1
# 使用这样的字段, 显著的好处是不需要额外的$表示引用
d=$[ 3 == 4 ]
echo $d
# 0
  1. 三元运算符
    重点关注第4种情况: 虽然echo false的结果为0, 但是0并不代表false
[ 1 == 1 ] && echo 'yes' || echo 'no'
# yes
[ 1 == 2 ] && echo 'yes' || echo 'no'
# no
[ 1 ] && echo 'yes' || echo 'no'
# yes
[ 0 ] && echo 'yes' || echo 'no'
# yes
[ ] && echo 'yes' || echo 'no'
# no
  1. 与或的逻辑运算
# if后面的[]可以直接进行逻辑运算
name=$1
if [ ${#name} == 0 ]
then
name='carney'
fi
echo ${name}

if [[ $[ 1 == 1 ] && $[ 2 == 3 ] ]]
then
echo 'yes'
else
echo 'no'
fi
# 显示的是yes, 为什么
if [ 0 ]
then
echo 'yes'
fi
# 只有if后面的条件是空的时候, 才会被视为假

if [[  1 -eq 1  &&  2 -eq 3  ]]
then
echo 'yes'
else
echo 'no'
fi
# 使用-eq, -gt, -lt等, 返回的更接近boolean类型, 也可以进行正常的逻辑运算
流程控制
##### 数组 #####
arr=(5 18 26 61 37 12 63 44 58)

##### while循环 #####
i=0
len=${#arr[@]}
echo $len
while (( $i<$len ))
do
i=$[ $i + 1 ]
# 下面的代码是不可用的
# $i=$[ $i + 1 ]
echo ${arr[$i]}
done

##### for循环 #####
for i in 5 8 5 47 7 4 7
do
echo $i
done

for i in 0 1 2 3 4 5 6 7 8
do
echo ${arr[$i]}
done

for i in ${arr[@]}
do
echo $i
done

##### case when #####
a=$1
case $a in
# 如果a的值是1或2或3
	1|2|3)
		echo 'lo'
# ;;不可以省略, 符合后必须跳出, 不能穿透
	;;
# 如果是4或5
	1|4|5)
		echo 'hi'
	;;
# 如果是其它
	*)
		echo 'wtf'
	;;
esac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值