当前位置:   article > 正文

Linux基础-Bash脚本速通

Linux基础-Bash脚本速通

一、概述

这里是记录我使用bash脚本的常用浓缩代码,很多都是根据下面脚本改造。
在这里插入图片描述

二、输入、输出

0. 变量赋值

注意赋值号左右不能有空格

a=5
b=6

result=$[a+b] 
echo "result 为: $result"

#result 为: 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1. 输入

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh
read name 
echo "$name It is a test"

# sad It is a test
  • 1
  • 2
  • 3
  • 4
  • 5

2. 输出

  • echo 内容
    内容是可以加字符串的双引号或者不加也可以的
# 1.显示普通字符串
echo "It is a test"		# It is a test
echo It is a test		# It is a test

# 2.显示转义字符
echo "\"It is a test\""		# "It is a test"

# 3.显示变量
name="zhangsan"
echo $name is a good name		# zhangsan is a good name
echo "$name is a good name"		# zhangsan is a good name

# 4.显示换行
echo -e "Zhangshan! \n" 	# -e 开启转义
echo "is a good name"			
# 输出如下
# Zhangshan! 

# is a good name

# 5.显示不换行 
echo -e "Zhangshan! \c" 	# -e 开启转义 \c 不换行
echo "is a good name"
# 输出如下
# Zhangshan! is a good name

# 6.显示结果定向至文件
echo "It is a test" > myfile

# 7.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'		# $name\"

# 8.显示命令执行结果(用的是反引号 `, 非单引号 ')
echo `date`		# 2024年 04月 29日 星期一 21:58:21 CST

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

三、传递参数

参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@“用「”」括起来的情况、以"$1" “$2” … “$n” 的形式输出所有参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
echo "bash例子";
echo "脚本名称:$0";
echo "脚本运行的当前进程ID号: $$"
echo "后台运行的最后一个进程的ID号: $!"
echo "参数字符串 : $*"

# 循环获取参数
for loop in $@
do
    echo "参数: $loop"
done

# 换行
echo -e " \n"

if [ $# == 1 ]
then
   echo "第一个参数为:$1";
elif [ $# == 2 ]
then
   echo "第一个参数为:$1";
   echo "第二个参数为:$2";
elif [ $# == 3 ]
then
   echo "第一个参数为:$1";
   echo "第二个参数为:$2";
   echo "第三个参数为:$3";
else
   echo "参数不对"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

输出

bash例子
脚本名称:test.sh
脚本运行的当前进程ID号: 279888
后台运行的最后一个进程的ID号: 
参数字符串 : 11 33 56
参数: 11
参数: 33
参数: 56
 

第一个参数为:11
第二个参数为:33
第三个参数为:56
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

四、循环控制

1. for 循环

循环语法

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例子1

  • 1.循环输出列表
for i in 1 2 3 4 5
do
    echo "The value is: $i"
done
  • 1
  • 2
  • 3
  • 4
  • 2.最近当前文件的文件中的文本追加到一个文件中
for f_name in $(ls .)
do
	echo "$f_name content:" >> all.txt
	cat $f_name >> all.txt
done
  • 1
  • 2
  • 3
  • 4
  • 5

2. while 循环

语法格式

while condition
do
    command
done
  • 1
  • 2
  • 3
  • 4

例子:

  • 1.输出小于5的数
#!/bin/bash
int=1
while [ $int -le 5 ]
do
    echo $int
    let "int++"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3. untill循环

五、流程控制

其实和其他的编程语言的 if else 一样,

格式可以写多行或者单行,单行就要用分号隔开就好啦

# 多行
if [ condition ]
then
    command1 
    command2
    ...
    commandN 
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# 单行
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
  • 1
  • 2

if else 如果用的是方括号 […] 在判断语句中大于使用 -gt,小于使用 -lt。

if [ "$a" -gt "$b" ]; then
    ...
fi
  • 1
  • 2
  • 3

如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 > 和 <。

if (( a > b )); then
    ...
fi
  • 1
  • 2
  • 3

1. 数值类比较

比较运算符

比较符含义
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真
a=10
b=20
if [ $a == $b ]
then
   echo "a == b"
elif [ $a -gt $b ]
then
   echo "a > b"
elif [ $a -lt $b ]
then
   echo "a < b"
else
   echo "没有符合的条件"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2. 字符串类比较

比较符含义
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

num3=""

if [ -z num3 ]
then
   echo 'num3 长度为0!'
fi

if [ -n num2 ]
then
   echo 'num2 长度不为0!'
fi

#两个字符串不相等!
# num2 长度不为0!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3. 文件类比较

这个就是判断文件、目录是否存在、文件是否可读可写可执行、文件是否是字符型还是块设备等判断。

比较符含义
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真
cd /bin
if [ -e ./bash ]
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

比如我在桌面上检测文件夹是否存在,不存在就创建对应的文件

# 创建文件夹
if [ -d ~/Desktop/test_fd ]
then
    echo 'Folder exist!'
else
    echo 'Folder no exist!'
    mkdir  ~/Desktop/test_fd
    echo 'test_df will be created!'
fi

cd ~/Desktop/test_fd

# 创建文件
if [ -e 1.txt ]
then
    echo '1.txt exist!'
else
    echo '1.txt not exist!'
    touch 1.txt
    echo '1.txt will be created!'
    ls -al > 1.txt
fi

echo '1.txt content: '

ls -al .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

输出结果如下:
在这里插入图片描述

六、

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/948350
推荐阅读
相关标签
  

闽ICP备14008679号