Shell常用命令,收藏自用

Shell常用命令

一、Shell变量

1、变量名命名规范

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

  • 中间不能有空格,可以使用下划线(_)。

  • 不能使用标点符号。

  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

     有效的命名:
     	YouName
     	You_Name_one
     	_you
     	you2
     	
     无效的命名:
     	?you=12
     	user*123=root
    

2、(1)使用变量

  • 使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

     your_name="test"
     echo $your_name 	
     echo ${your_name}
    
  • 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

      echo "I am the best ${yname}Script"
    
  • 已定义的变量,可以被重新定义,如:

     your_name="kang"
     echo $your_name
     
     your_name="mrli"
     echo $your_name
    
  • (2)只读变量

  • 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
    例如:

    your_name="test"
    readonly your_name
    your_name="you are good"
    
    输出结果为:
    test.sh: line 5: your_name: readonly variable
    
  • (3)删除变量

  • 使用 unset 命令可以删除变量。语法:

     unset your_name
    
  • 变量被删除后不能再次使用。unset 命令不能删除只读变量。

     your_name="good"
     unset your_name
     echo $your_name
     
     以上实例执行将没有任何输出。
    
  • (4) 定义全局变量 export

     [root@www ~]# export your_name='zhangsan'
     #上述设置的变量其实都是一次性变量,系统重启就会丢失。
     #如果希望本地变量或者全局变量可以永久使用,可以将需要设置的变量写入变量文件中即可。
    
  • (5)变量类型
    1、局部变量
    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    2、环境变量
    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    3、shell变量
    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

二、Shell字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。(除了数字和字符串,也没啥其它类型好用了)

1、单引号

your_name='zhangsan'

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

2、双引号

your_name='zhangsan'
str="Your are best "$your_name" ! "
echo $str

输出结果为:
Your are best  zhangsan !

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

3、拼接字符串

your_name="zhangsan"

# 使用双引号拼接

str="hello, "$your_name" !"
str_1="hello, ${your_name} !"
echo $str $str_1

# 使用单引号拼接

str_2='hello, '$your_name' !'
str_3='hello, ${your_name} !'
echo $str_2  $str_3

#输出结果为:

hello, zhangsan! hello, zhangsan!
hello, zhangsan! hello, ${your_name} !

4、获取字符串长度

string="abcde"
echo ${#string} #输出 5

5、提取子字符串

#从字符串第 2 个字符开始截取 4 个字符:
string="Your are best!"
echo ${string:1:3} # 输出 our

注意:第一个字符的索引值为 0。

三、Shell 数组

  • bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
  • 获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

1、定义数组

数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)

例 如:

array_test=(value0 value1 value2 value3)

2、读取数组

#读取数组元素值的一般格式是:
${数组名[下标]}

例   如:
valuen=${array_test[n]}

#使用 @ 符号可以获取数组中的所有元素
例   如:
echo ${array_name[@]}

3、获取数组的长度

#取得数组元素的个数
length=${#array_test[@]}

#或者
length=${#array_test[*]}

#取得数组单个元素的长度
lengthn=${#array_test[n]}

四、Shell 传递参数

  • 在执行 Shell 脚本时,我们可以向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推……

例如:

#!/bin/bash
#author:test
echo "Shell 传递参数实例";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

输出结果:
$ bash test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

#另外,还有几个特殊字符用来处理参数:
在这里插入图片描述

五、Shell 基本运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

1、算术运算符

假定变量 a 为 10,变量 b 为 20
在这里插入图片描述

实例:

#!/bin/bash


a=10
b=20

val=`expr $a + $b`
echo " a + b = $val"

val=`expr $a - $b`
echo " a - b = $val"

val=`expr $a \* $b`
echo " a * b = $val"

val=`expr $b / $a`
echo " a / b = $val"

echo "a==b?"
if [ $a == $b ]
	then
		echo "true , a=b"
else	
		echo "false , a!=b"
fi

echo "a!=b?"
if [ $a != $b ]
   then
	echo "true , a!=b"
else
	echo "false , a=b"
fi

#输出结果为
 a + b = 30
 a - b = -10
 a * b = 200
 a / b = 2
 a==b?
 false , a!=b
 a!=b?
 true , a!=b
 

2、关系运算符

假定变量 a 为 10,变量 b 为 20

在这里插入图片描述
实例:

#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
   then
        echo "$a -eq $b a等于b "
else
        echo "$a -eq $b a不等于b"
fi

if [ $a -ne $b ]
   then
        echo "$a -ne $b a不等于b"
else
        echo "$a -ne $b a等于b"
fi

if [ $a -gt $b ]
   then
        echo "$a -gt $b a大于b"
else
        echo "$a -gt $b a小于b"
fi

if [ $a -lt $b ]
   then
        echo "$a -lt $b a小于b"
else
        echo "$a -lt $b a大于b"
fi

if [ $a -ge $b ]
   then
        echo "$a -ge $b a大于等于b"
else
        echo "$a -ge $b a小于等于b"
fi

if [ $a -le $b ]
   then
        echo "$a -le $b a小于等于b"
else
        echo "$a -le $b a大于等于b"
fi    

#输出结果  
 10 -eq 20 a不等于b
 10 -ne 20 a不等于b
 10 -gt 20 a小于b
 10 -lt 20 a小于b
 10 -ge 20 a小于等于b
 10 -le 20 a小于等于b
 

3、布尔运算符

假定变量 a 为 10,变量 b 为 20
在这里插入图片描述

实例:

#!/bin/bash

a=10
b=20

if [ $a != $b ]
   then
        echo " $a != $b , a 不等于 b , 返回true"
else
        echo " $a != $b , a 等于 b"
fi

if [ $a -lt 20 -o $b -gt 100 ]
   then
        echo "$a < 20 -a  $b > 100 ,返回 true"
else
        echo "$a < 20 -a $b > 100 ,返回 false"
fi

if [ $a -lt 20 -a $b -gt 15 ]
   then
        echo "$a < 20 -o $b > 15 , 返回true"
else
        echo "$a < 20 -o $b > 15 , 返回flase"
fi

输出结果:
 10 != 20 , a 不等于 b , 返回true
 10 < 20 -a  20 > 100 ,返回 true
 10 < 20 -o 20 > 15 , 返回true


4、逻辑运算符

假定变量 a 为 10,变量 b 为 20

在这里插入图片描述
实例:

#!/bin/bash

a=10
b=20

if [[ $a -lt 20 && $b -gt 15 ]]
   then
        echo " $a < 20 且 $b > 15  , 返回true"
else
        echo " $a < 20 且 $b > 15  ,返回flase"
fi

if [[ $a -lt 20 || $b -gt 100 ]]
   then
        echo " $a < 20 或 $b > 100  , 返回true"
else
        echo " $a < 20 或 $b > 100  ,返回flase"
fi

#输出结果
 10 < 2020 > 15  , 返回true
 10 < 2020 > 100  , 返回true

5、字符串运算符

假定变量 a=“abc”,变量 b="xyz"
在这里插入图片描述
实例:

#!bin/bash

a="abc"
b="xyz"

if [ $a = $b ]
   then
   		echo "$a = $b : a 等于 b"
else
    	echo "$a = $b: a 不等于 b"
fi

if [ $a != $b ]
   then
   		echo "$a != $b : a 不等于 b"
else
   		echo "$a != $b: a 等于 b"
fi

if [ -z $a ]
   then
   		echo "-z $a : 字符串长度为 0"
else
   		echo "-z $a : 字符串长度不为 0"
fi

if [ -n "$a" ]
   then
   		echo "-n $a : 字符串长度不为 0"
else
   		echo "-n $a : 字符串长度为 0"
fi

if [ $a ]
   then
   		echo "$a : 字符串不为空"
else
   		echo "$a : 字符串为空"
fi

输出结果:
abc = xyz: a 不等于 b
abc != xyz : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空

6、文件测试运算符

变量 file 表示文件 /temp/test.sh,大小为 100 字节,具有 rwx 权限
在这里插入图片描述
实例

#!/bin/bash

file="/temp/test.sh"
if [ -r $file ]
   then
   		echo "文件可读"
else
   		echo "文件不可读"
fi

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

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

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

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

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

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

#输出结果:
文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在

六、Shell echo命令

1.显示普通字符串:

echo "It is a test"

2. -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

  • \c 在输出结尾不换行

     #!/bin/sh
     echo -e "OK! \c"
     echo "It is a test"
     输出结果:
     OK! It is a test
    
  • \t 插入tab
    在这里插入图片描述

  • \b 删除前一个字符
    在这里插入图片描述

七、Shell read命令

  • 默认接受键盘的输入,回车符代表输入结束

------read 命令选项------

  1. -p 打印信息 (后面跟提示信息,即在输入前打印提示信息)
  2. -t 限定时间 (后面跟秒数,定义输入字符的等待时间)
  3. -s 不回显 (安静模式,在输入字符时不再屏幕上显示,例如login时输入密码)
  4. -n 可以输入字符个数 (后跟一个数字,定义输入文本的长度,输入字符数达到后,会自动退出)
例:
#num是定义的变量
#/bin/bash
read -n1 -p "请输入需要安装的版本号:" num


输出结果为:
请输入需要安装的版本号:

八、Shell 流程控制

---------------------- if 判 断 语 句--------------------------

  • 1、单if语句
if [ condition ]           #condition 值为true or false
   then
      commands
fi

-----该语句翻译成汉语大意如下:

假如  条件为真
 那么
    执行commands代码块
结束
  • 2、if-then-else语句
if [ condition ]
     then
          commands1
else
          commands2
fi

-----该语句翻译成汉语大意如下:

假如条件为真
  那么
        执行commands1代码块
否则
        执行commands2代码块
结束
  • 3、 if-then-elif语句
if [ condition 1]
     then
            commands1
elif [ condition 2]
     then
             commands2
  .......
else
            commandsX
fi

-----该语句翻译成汉语大意如下:

假如 条件1 为真
      那么
             执行代码块1
假如 条件2 为真
      那么
            执行代码块2
      以此类推的N个条件及对应的执行代码块
否则 【以上所有条件中没有一个满足的】
           执行代码块X
结束

---------------------- for 循 环 语 句--------------------------

  • for 语法一
for var in value1 value2 ......
    do
        commands
done

#实例
在这里插入图片描述


  • for 语法二
for ((变量;条件;自增减运算))
   do
          代码块
done

#实例
在这里插入图片描述


sleep N 脚本执行到该步休眠N秒

#实例
在这里插入图片描述


continue 跳过循环中的某次循环

#实例
在这里插入图片描述


break 跳出循环继续执行后续代码

#实例
在这里插入图片描述


---------------------- while 循 环 语 句--------------------------

while循环和for其实是一样的,一般我们在

  • 明确知道需要循环多少次的时候用:for;
  • 不知道循环多少次的时候用:while;
#注意,条件为真while才会循环,条件为假,while停止循环
while  [ condition ]  

 do
             commands
done

---------------------- until 循 环 语 句--------------------------

#注意,条件为假until才会循环,条件为真,until停止循环
until [ condition ]     
 
 do
         commands代码块
done

---------------------- case 条 件 判 断 语 句--------------------------

语法:
case 变量  in 
1)
           执行代码块1
;;
2)
           执行代码块2
;;
......
esac
注意:每个代码块执行完毕要以;;结尾代表结束,case结尾要以倒过来写的esac来结束。

#实例
在这里插入图片描述

九、shell函数

语法一:
函数名 ()
 {
    代码块
    return N
}
    
语法二:
function 函数名 
{
      代码块
      return N
}

实例:

function test_function 
{
    echo "hello world"
}
test_function就是函数名
test_function()
{

	echo "hello world"
	
}
test_function就是函数名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值