Shell 基础知识 太多了脑子记不住

切换到 test.sh 所在的目录

cd /home/shell

给脚本添加执行权限(775)

chmod +x ./test.sh

执行脚本文件

 ./test.sh

定义变量

variable=value
variable='value'
variable="value"
  1. 以单引号**’ '**包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
  2. 以双引号**" "**包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
  3. 如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。

只读变量

readonly

删除变量(unset 命令不能删除只读变量。)

unset

read

语法结构如下:

read [选项] 变量名
选项:-p(提示语句)

例1
#!/bin/bash
# Copyright (c)copyright (c) http://w.pythonabc.com/shell/
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

在这里插入图片描述

Shell字符串拼接

例1

#!/bin/bash
name="Shell"
url="http://w.pythonabc.com/shell/"
str1=$name$url  #中间不能有空格
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串
str4="$name: $url"  #这样写也可以
str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5

在这里插入图片描述
例2

#!/bin/bash
str1="当前时间是:$(date)"
echo $str1 

在这里插入图片描述

shell字符串简单应用

#!/bin/bash
str="study hard!"
i=beijing
echo ${str:0:5} $i

在这里插入图片描述

shell数组

在 Shell 中,用括号( )来表示数组,数组元素的下标由0开始,数组元素之间用空格来分隔。由此,定义数组的一般形式为:

array_name=(ele1  ele2  ele3 ... elen)

注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。
下面是一个定义数组的实例:

nums=(29 100 13 8 91 44)

Shell 是弱类型的,它并不要求所有数组元素的类型必须相同,例如

arr=(20 56 "http://w.pythonabc.com/shell/")

第三个元素就是一个“异类”,前面两个元素都是整数,而第三个元素是字符串。
Shell 数组的长度不是固定的,定义之后还可以增加元素。例如,对于上面的 nums 数组,它的长度是 6,使用下面的代码会在最后增加一个元素,使其长度扩展到 7:

nums[6]=88

此外,你也无需逐个元素地给数组赋值,下面的代码就是只给特定元素赋值:

ages=([3]=24 [5]=19 [10]=12)

以上代码就只给第 3、5、10 个元素赋值,所以数组长度是 3。

#!/bin/bash
nums=(29 100 13 8 91 44)
echo ${nums[@]}  #输出所有数组元素
nums[10]=66  #给第10个元素赋值(此时会增加数组长度)
echo ${nums[*]}  #输出所有数组元素
echo ${nums[4]}  #输出第4个元素

在这里插入图片描述

获取数组长度

#!/bin/bash
nums=(29 100 13)
echo ${#nums[*]}
#向数组中添加元素
nums[10]="http://w.pythonabc.com/shell/"
echo ${#nums[@]}
echo ${#nums[10]}
#删除数组元素
unset nums[1]
echo ${#nums[*]}

在这里插入图片描述

练习:
#!/bin/bash
bar=(a b d haerbin 123)
echo ${bar[3]}
echo ${#bar[*]}

echo =======

bar[6]=beijing
bar[7]=china
echo ${bar[@]}
echo =======


unset bar[3]
echo ${bar[@]}
echo ${#bar[*]}

在这里插入图片描述

shell数学计算

算术运算符在这里插入图片描述

数学计算方式

在这里插入图片描述六种

自增自减

在这里插入图片描述

(( )) 进行逻辑运算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择结构

if 语句

if condition
then
statement(s)
fi

if else语句

if condition
then
statement1
else
statement2
fi

if elif else 语句

if condition1
then
statement1
elif condition2
then
statement2
elif condition3
then
statement3
……
else
statementn
fi

#!/bin/bash

read n

if (( n >= 90 ))
 then
    echo "优"
elif (( n >= 80))
 then
    echo "良"

elif (( n >= 60))
then
    echo "及格"

else

    echo "不及格"

fi

在这里插入图片描述

与文件检测相关的 test 选项

在这里插入图片描述在这里插入图片描述

与数值比较相关的 test 选​项

在这里插入图片描述
例:

#!/bin/bash
read a b
if test $a -eq $b
then
    echo "两个数相等"
else
    echo "两个数不相等"
fi

在这里插入图片描述

循环结构

while 循环结构

while expr # 执行 expr
do # 若 expr 的退出状态为0,进入循环,否则退出
while
commands #循环体
done # 循环结束标志,返回循环顶部

例(从 1 加到 100 的和)
#!/bin/bash
i=1
sum=0
while ((i <= 100))
do
((sum += i))
((i++))
done
echo "The sum is: $sum"

在这里插入图片描述

for 循环结构

for variable in list

每一次循环,依次把列表 list 中的一个值赋给循环变量

do # 循环开始的标志
commands # 循环变量每取一次值,循环体就执行一遍
done # 循环结束的标志

Shell for in 循环举例:

#!/bin/bash
sum=0
for n in 1 2 3 4 5 6
do
    echo $n
     ((sum+=n))
done
echo "The sum is "$sum

在这里插入图片描述

两个数范围的累加(if 语句编程过程中的数据交换)

while 语句
#!/bin/bash
read m
read n
if ((m>n))
then
l=$m
m=$n
n=$l
fi
sum=0
while ((m <= n))
do
((sum += m))
((m++))
done
echo "The sum is: $sum"
for 语句
#!/bin/bash
read m
read n
if((m>n))
then
l=$m
m=$n
n=$l
fi

sum=0
for ((i=$m; i<=$n; i++))
do
((sum += i))
done
echo "The sum is: $sum"

运行结果:输入30 50

The sum is: 840

输入一个整数数,输出整数的位数
#!/bin/bash

read m
len=0
while((m>0))
do
((len++))
((m=m/10))
done

echo $len

在这里插入图片描述

添加删除用户

#!/bin/bash

userlist=$(cat users)

for user in $userlist
do
echo $user
useradd $user
done
#!/bin/bash

userlist=$(cat users)

for user in $userlist
do
echo '删除用户:'$user
userdel -r $user
done
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值