小白shell基础笔记

Shell脚本

变量

name="zhangsan"
for file in 'ls /etc'for file in $(ls /etc)

#变量的调用
echo $name
echo ${name}

for skill in Ada Coffe Action Java; do
	echo "I am good at ${skill}Script"
done

#只读变量 /bin/sh: NAME: This variable is read only,也不能删除
url="https://www.google.com"
readonly url
url="https://www.runoob.com"

#删除变量
unset name

字符串

  • 字符串时shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
  • 单引号
    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字符串中不能出现单独一个的单引号,但可成对出现,作为字符串拼接使用。
  • 双引号
    • 双引号里可以出现转义字符
    • 双引号里可以有变量
#字符串拼接--双引号
name='sunwukong'
name1="hello, "$name" !"
name2="hello, ${name} !"

#字符串拼接--单引号
passwd='123456'
passwd1='hello,'$passwd' !'
passwd2='hello, ${passwd} !'
echo $passwd2 # hello,${passwd} !

#字符串长度
email="123456@qq.com"
echo ${#email}
#从第几个开始往后数几个
echo ${email:1:4}

数组

  • bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

  • 数组元素的下标由0开始编号。获取数组中的数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0.

  •   #定义数组 括号来表示数组,数组元素用"空格"符号分割开
      favs=("足球" “篮球” “乒乓球” “保龄球”)
      #读取数组
      fav=${favs[1]}
      echo $facv
      #使用@符号可以获取数组中的所有元素
      echo ${favs[@]}
      #获取数组的长度
      length1=${#favs[@]}
      length2=${#favs[*]}
    

注释

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

:<<!
注释内容...
注释内容...
注释内容...
!

运算符

  • 关系运算符
运算符说明举例
-eq检测两个数是否相等,相等返回ture[$a -eq $b]返回false
-ne检测两个数是否不相等,不相等返回true[$a -ne $b]true
-gt检测左边的数是否大于右边的,如果是,则返回true[$a -gt $b]返回false
-lt检测左边的数是否小于右边的,如果是,则返回true[$a -lt $b]返回true
-ge检测左边的数是否大于等于右边的,如果是,则返回true[$a -ge $b] 返回false
-le检测左边的数是否小于等于右边的,如果是,则返回true[$a -le $b] 返回true
#!/bin/bash

a=10
b=20
//if这里一定要有空格
if [ $a -eq $b ]
then
        echo "$a -eq $b : a 等于 b"
else
        echo "$a -eq $b: a 不等于 b"
fi
  • 布尔运算符
运算符说明举例
非运算[!false]返回ture
-o或运算,有一个表达式为true则返回true[$a -lt 20 -o $b -gt 100]则返回true
-a与运算,有false则返回false[$a -lt 20 -o $b -gt 100]则返回true
  • 文件测试运算符
运算符说明举例
=检测两个字符串是否相等,相等返回true[$a = $b] 返回false
!=不相等/
-z检测字符串长度是否为0,为0则返回true[-z $a] 返回false
-n检测字符串长度是否不为0[-n “$a”]返回true
$检测字符串是否为空,不为空返回true[$a] 返回true
  • 算数运算符
    • expr是一款表达式计算工具,使用它能完成表达式的求值操作。
a=10 b=20
echo `expr $a + $b`
//echo `expr $[a+b]`
30
  • 文件测试运算符
#!/bin/bash

if [ -r $1 ]
then
        echo "文件可读"
else
        echo "文件不可读"
fi

if [ -w $1 ]
then
        echo "文件可写"
else
        echo "文件不可写"
fi

if [ -x $1 ]
then
        echo "文件可执行"
else
        echo "文件不可执行"
fi

if [ -f $1 ]
then
        echo "文件为普通文件"
else
        echo "文件为特殊文件"
fi

if [ -d $1 ]
then
        echo "文件是个目录"
else
        echo "文件不是目录"
fi


if [ -s $1 ]
then
        echo "文件不为空"
else
        echo "文件为空"
fi


if [ -e $1 ]
then
        echo "文件存在"
else
        echo "文件不存在"
fi

执行脚本输入传参

1)$+数字

#!/bin/bash
# 传递参数

echo "脚本名称:$0"

echo "第一个参数:$1"
echo "第二个参数:$2"

2)read(监控键盘的一个输入)

echo 'please input a sb name'
read username
echo $username

echo打印数据

##显示普通字符串
echo "Hello world"
##显示转义字符
echo "\"Hello world\""
##显示换行
echo -e "OK! \n"
##显示不换行
echo -e "OK! \c"
##显示显示结果定向至文件,结果会创建一个文件然后有一行Hello world
##>表示输出,会覆盖文件原有的内容
##>>表示追加,会将内容追加到已有的文件的末尾。
echo "Hello world" > myfile
##原样输出字符串
echo '$name\"'
##显示命令执行效果
echo `date`

流程控制

if condition1
then//符合条件就是then
	command1
elif condition2
then
	command2
else
	commandN
fi

case

echo '输入1到4之间的数字:'
echo '你输入的数字为:'
read num
//;;相当于break,*)相当于default
case $num in
	1) echo '你选择了1'
	;;
	2) echo '你选择了2'
	;;
	3) echo '你选择了3'
	;;
	4) echo '你选择了4'
	;;
	*) echo '你没有输入1-4之间的数字'
	;;
esac

函数

  • linux shell可以用户定义的数,然后在shell脚本中可以随便用。

  • 可以带function fun()定义,也可以直接fun()定义,不带任何参数。

  • 参数返回,可以加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)。

  •   #! /bin/bash
      
      ## 第一个函数-----------------------
      demoFun(){
      	echo "这是我的第一个shell 函数"
      }
      echo "-------函数开始执行------"
      demoFun
      echo "-------函数执行完毕------"
      
      ##函数返回值-------------------------------
      funwithReturn(){
      	echo "这个函数会对输入的两个数字进行相加运算..."
      	echo "输入第一个数字:"
      	read aNum
      	echo "输入第二个数字:"
      	read anotherNum
      	echo 
      }
      num=funwithReturn
      #函数返回值在调用该函数后通过$?来获得。
      echo "输入的两个数字之和为$?!"
      
      ##函数参数---------------
      funwithParam(){
      	echo "第一个参数为 $1 "
      	echo "第二个参数为 $2 "
      	echo "第十个参数为 $10 "
      	echo "第十个参数为 ${10} "
      	echo "第十一个参数为 ${11} "
      	echo "参数总共有 $# 个!"
      	echo "作为一个字符串输出所有参数 $* !"
      }
    

eval

在脚本中,eval 是一个用于执行动态生成的字符串作为代码的函数。它的作用是将字符串参数作为有效的表达式、命令或脚本进行求值和执行。

#执行赋值0给flag1
eval "$flag$1=0"
#获取echo $flag1的结果并和0进行比较
if [ "$(eval echo \$$flag$1)" -eq 0 ]; then

udhcpc

udhcpc 是一个用户空间的 DHCP 客户端工具。DHCP(Dynamic Host Configuration Protocol)是一种网络协议,用于自动地分配 IP 地址、子网掩码、默认网关以及其他与网络连接相关的参数。

#-i eth0 指定要使用 eth0 网络接口进行 DHCP 请求。
udhcpc -i eth0

local

用于声明局部变量

local interface="eth$1"

ip link

ip link 是一个用于管理网络接口的命令行工具。它通常用于配置和管理 Linux 操作系统中的网络接口,如以太网接口(Ethernet)、无线接口(Wi-Fi)和虚拟接口(例如 VLAN、Tunnel 等)。

#列出当前系统上的所有网络接口,并提供与这些接口相关的信息,例如接口名称、MAC 地址、状态(UP/ DOWN)、接口类型、MTU 大小
ip link
#列出所有网络接口及其详细信息
ip link show
#启用或禁用一个网络接口
ip link set <interface> up    # 启用接口
ip link set <interface> down  # 禁用接口
#设置网络接口的 MAC 地址
ip link set <interface> address <mac_address>
#设置网络接口的 MTU 大小
ip link set <interface> mtu <mtu_size>

ip route

#列出所有路由表项及其详细信息
ip route show
#列出特定网络的路由表项
ip route show <network_address>
#添加一条新的路由表项
ip route add <network_address>/<subnet_mask> via <gateway> dev <interface>
#删除一条路由表项
ip route del <network_address>/<subnet_mask> via <gateway> dev <interface>
#删除默认路由
ip route del default >/dev/null 2>&1
#删除eth0的所有路由
ip route flush dev eth0
#添加eth1为默认路由
ip route add default via 192.168.1.1 dev eth1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值