4. linux编程语法

一. linux shell 编程语法

1. 变量

1.定义与使用变量

var_name="123"  # 变量定义的 = 两边不能有空格,如 var_name = "123" 会报错
echo $var_name  # 通过 $变量名 来使用变量

2. 将变量设置为只读变量

var_only_read="Hello"
readonly var_only_read  # 通过readonly关键字

3. 删除变量

unset var_name
# 注意:只读变量是不能被删除的
# 如果要删除只读变量,关闭 shell 终端,重新打开就没有了。 因为变量的作用范围就是在当前shell窗口

4. 变量类型

  1. 字符串: var_name="victom"

  2. 拼接字符串: greeting="hello,$var_name !"

  3. 数组:

    1)array_name=(value0 value1 value2):一次性声明多个数组成员,元素与元素之间使用空格分割
    2) array_name[0]=value0: 单独赋值

  4. 取数组: value=${array_name[n]}

  • 实战
  1. 数组初始化
my_arr=(a b "c" d)
echo "第一个元素是:${my_arr[0]}"
echo "使用*或者@取出所有数组元素: ${my_arr[@]}, ${my_arr[@]}"
  1. 数组单个定义
my_arr[0]=1
my_arr[4]=4
echo "使用*或者@取出所有数组元素: ${my_arr[@]}, ${my_arr[@]}"

2. 控制语句 if,for, while

1. if

# 语法
if [ 条件 ];  # 条件必须用[]包裹起来,条件表达式左右要有一个空格
then
  指令1;
  指令2;
fi 
# 实例1
if [ 2==2 ];then echo "true";else echo "false";fi
# 实例2: 如果要用 > 表示,则要用两个 [[   ]]
if [[ 2>1 ]];then echo "true";else echo "false";fi

# 实例3: 如果要用一个 [  ],则要使用 -gt -lt 表示大于或小于
if [ 2 -gt 2 ];then echo "true";else echo "false";fi
  • 实战
    比较两个变量的大小,并输出不同的值
a=90
b=100
if [ $a -eq $b ]; then echo "equal"; elif [ $a -gt $b ]; then echo "big";elif [ $a -lt $b ];then echo "small";fi

2. for

# 语法
for var in item1 item2 ...itemN
do
  指令1
  指定2
done
#实例
for i in 1 2 3 4 5
do
  echo "hello $i"
done
  • 实战
    循环读取test.txt文件内容并输出
# cat test.txt:显示文件内容
# $(cat test.txt): 表示把cat test.txt当做命令执行得到一个结果,然后交给for循环去循环

for line in $(cat test.txt)
do 
  echo $line
done

3. while

# 语法
while 条件
do
  指令..
done
#示例
a=1
# 注意 while后面的条件要用 ()括号
while (( $a < 5 ));do echo $a; let a++; done;

  • 实战
    循环读取文件内容并输出
# read line : 表示读取文件中的行,line是变量
# < test.txt: 表示从这个文件读取内容

while read line; do echo $line; done < test.txt

二. bash脚本的编写

1. read命令

定义

read 命令是用于从终端或者文件中读取输入的内容的 内部命令,读取的是整行输入,每行末尾的换行符不被读入

read命令使用

  1. 从标准输入读取输入并赋值给变量
read var
键盘输入一个内容, 就会自动赋值给变量var

echo $var
  1. 从标准输入读取多个内容
read var1 var2 var3
  1. 不指定变量(默认赋值给REPLY)
read

4. linux编程语法

2. 脚本参数传递

脚本是放在.sh文件中的,因此可以给.sh脚本进行参数传递
执行.sh文件的时候,空格 参数就可以传递进去了

$0: 脚本名称
$1~$n: 获取参数,打印传参的内容
$#: 传递到脚本的参数个数
$$: 脚本运行的当前进程ID号
$*: 以一个单字符串显示所有向脚本传递的参数
$?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

-实战
新建一个test.sh文件

#!/bin/bash  # 第一行输入这个内容,目的指定bash shell
echo $1,$2,$3  # $1,$2,$3 分别对应着传递进来的参数
echo "这个shell的文件名是:" $0
echo "参数数量是: " $#
echo "参数的所有内容: " $*
echo "脚本的返回状态:" $?

执行脚本并传递参数,参数111 222 333 直接跟在执行的文件名后面就行

4. linux编程语法

3. 基本运算

a=1 b=2
# 语法有严格的格式要求
# 1. 加减乘除运算,必须用 反引号 `` 括起来
# 2. 整个计算表达式之间必须有三个空格:expr与$a, $a与+,+与$b之间共有三个空格
+: 加法 `expr $a + $b`
-: 减法 `expr $a - $b`
*: 乘法 `expr $a \* $b`
/: 除法 `expr $a / $b`

%: 取余 `expr $a % $b`
=: 赋值 a=$b 将把变量b的值赋给a
==: 相等 相同则返回true; [ $a == $b ] 返回 false
!=: 不相等 不相等则返回true; [ $a != $b ] 返回 true

-eq: 检查相等 [ $a -eq $b ] 返回false
-ne: 检查不相等 [ $a -ne $b ] 返回true
-gt: 检查左边大于右边 [ $a -gt $b ] 返回false
-lt: 检查左边小于右边 [ $a -lt $b ] 返回true
-ge: 检查左边是否大于等于右边 [ $a -ge $b ] 返回false
-le: 检查左边是否小于等于右边 [ $a -le $b ] 返回false

4. bash与linux的命令组合

1. bash与目录命令

# 下面的命令可以直接卸载一个 .sh文件里面
mkdir test
cd test
echo "hello" > test.txt  #  将hello文本重定向写入到test.txt文件
ls

2. bash与内存

# 统计内存使用
ps aux
  • 实战
    ps aux得到进程号后,提取PID

# 解析
# ps aux | awk:列出所有进程并交个 awk处理
# awk ‘{print $2}‘: awk根据空格分割,打印出第二列内容,其中首行PID是显示出来的
# grep -v PID: 不显示首行PID

ps aux | awk ‘{print $2}‘ | grep -v PID

4. linux编程语法

上一篇:关于系统监测的Linux常用命令


下一篇:Linux C 编程学习第四天_循环语句_while_do/while_for_goto