shell基础知识整理

文章介绍了Shell脚本中的比较运算符,如-eq,-ne,-gt等,并强调了在Shell中0代表真,1代表假。同时讲解了$符号的各种用途,如$$表示PID,$?表示命令返回值等。接着,文章详细阐述了shell脚本的常见判断语法,包括数值判断、文件测试和字符串比较。最后,讨论了for、while和until循环语句的使用方法及其示例。
摘要由CSDN通过智能技术生成

1、shell中比较运算符

-eq //equals等于
-ne //no equals不等于
-gt //greater than 大于
-lt //less than小于
-ge //greater equals大于等于
-le //less equals小于等于

注意:
1、在shell中进行比较时,结果为0代表真,为1代表假。

2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。

2、shell中${x}符号代表意思说明

$$ ——Shell本身的PID(ProcessID) 
$! ——Shell最后运行的后台Process的PID 
$? ——最后运行的命令的结束代码(返回值) 
$- ——使用Set命令设定的Flag一览 
$* ——所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。 
$@ ——所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。 
$# ——添加到Shell的参数个数 
$0 ——Shell本身的文件名 
$1$n ——添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 
${#array_name[@]}${#array_name[*]} --表示获取数组的长度

注意:@ 和*
相同点:都是引用所有参数
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在1 2 3)则"*" 等价于 “1 2 3"(传递了一个参数);而“@" 等价于 “1” “2” “$3”(传递了三个参数)

3、shell脚本常见判断语法

if [ 条件判断式 ];then    # 条件判断式2边“[ ]”要留有空格
	当条件判断式成立时,可以进行指令工作内容
fi  # 将if反过来,即fi表示if结束之意 

3.1数值判断语法

# 将网卡中断序列循环绑定到指定cpu上
irq1=`cat /proc/interrupts| grep -E ${bus} | awk -F ':' '{print $1}'`
irq1=`echo $irq1`
#cpulist=(0 1 2 3 4 5 6 7 {51..71} 93 94 95)
cpulist=({88..95})
c=0
for irq in $irq1
do
    if [ $c -ge ${#cpulist[*]} ];then  #-ge表示大于等于,greater equals
        c=0
    fi
    echo ${cpulist[c]} "->" $irq
    echo ${cpulist[c]} > /proc/irq/$irq/smp_affinity_list
    let "c++"
done

注意:
1、条件表达式两边均应有一个空格。
2、数组下标是从0开始

3.2文件测试语句(使用指定条件来判断文件是否存在或权限是否满足等情况的运算符)

运算符	作用
-d	    测试文件是否为目录类型
-e	    测试文件是否存在
-f	    判断是否为一般文件
-r	    测试当前用户是否有权限读取
-w	    测试当前用户是否有权限写入
-x	    测试当前用户是否有权限执行

举例说明:
例1:使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过 Shell 解释 器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在:

[root@localhost ~]# [ -d /etc/fstab ]
[root@localhost ~]# echo $?
127

例2:使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为 0,则代表文件存在,且为一般文件:

[root@localhost ~]# [ -f /etc/fstab ]
[root@localhost ~]# echo $?
0

3.3字符串比较(字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)。字符串比较中常见的运算符如下表所示:)

运算符	作用
=	    比较字符串内容是否相同
!=	    比较字符串内容是否不同
-z	    字符串内容是否为空

例1:通过判断 String变量是否为空值,进而判断是否定义了这个变量

[root@localhost ~]# [ -z $string ]
[root@localhost ~]# echo $?
0

3.4逻辑测试语句(&&、||、!)

  • &&:逻辑“与”。它表示当前面的命令执行成功后才会执行它后面的命令。因此可以用来判断/dev/sda文件是否存在,若存在则输出ok字样。
[root@localhost ~]# [ -e /dev/sda ] && echo "ok"
ok

  • ||:逻辑“或”。表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:
[root@localhost ~]# [ $USER = root1 ] || echo "user"
user

  • !:逻辑“非”。它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的; 原本测试错误的结果则将其变成正确的。
[root@localhost ~]# [ ! $USER = root1 ] && echo "root"
root

4、shell中常见循环语句

4.1 for循环(固定循环)

for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的。

# 1、常见风格
for 变量名 in 取值范围
do
	命令序列
done 

# 2、c语言风格
for ((expr1;expr2;expr3))
do
   command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

案例1如下:

# 第1种
for 变量名 in {list}     ###变量池

do     ###开始
command    ###执行的命令
done     ####结尾

# 第2种
for i in {a..c}
do
    echo $i
done 

# 第3种
for i in {1..5}    //{}里面不识别变量
do
    echo $i
done

案例2如下:

for ((i=1;i<=100;i++))
do
	echo $i
done

4.2 while循环(不定循环,条件为真才循环)

while循环,当条件表达式满足时,就进行循环,直到条件表达式不成立时才结束。

# 语法
while [ condition ]
    do
        command...
    done
# 
while  [ 1 -eq 1 ] 或者 (( 2 > 1 ))  # -eq表示等于  equals
	do
     command
     command
     ...
	done
 
 当条件测试成立(必须为真),返回值为0才能执行循环体

4.3 until循环(不定循环,条件为假才循环)

until循环,当条件表达式不满足时,就进行循环,直到条件表达式满足时才结束。

# 语法
until [ condition ]
    do
        command...
    done
# 
until  [ 1 -ne 1 ] 或者 (( 2 < 1 ))  # -ne表示等于  no equals
	do
     command
     command
     ...
	done
 
 当条件测试成立(必须为假),返回值不为0才能执行循环体 (shell中真为0,假为非0)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值