微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell脚本一:编程基础

文章目录

一、Shell初识

Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种电脑程序与文本文件内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种脚本语言来设计,其运作方式与直译语言相当,由Unix shell扮演命令行解释器的角色,在读取shell脚本之后,依序运行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,文件操作等。

1、格式

在创建shell脚本时,必须在第一行指定要使用的shell,其格式为:
#!/bin/bash
(#):用作注释行,第一行是个列外,#后面的惊叹号会告诉shell用哪个shell来运行脚本,这里是可以使用bash
shell脚本的后缀一般是 sh结尾,写在shell里面的命令是按照行,从上往下执行的。

2、执行方式

加上执行权限。
chmod +x test.sh

用点号(.)执行,如 ./test.sh
或者:sh test.sh
假如使用sh命令执行脚本文件,可以没有+x 和 第一行解释器#!/bin/bash
假如不是使用sh命令,那么需要+x 且 #!/bin/bash
[root@vm01 test]# sh -x test.sh #是debug模式

在这里插入图片描述

3、echo

echo命令后面可以加上字符串,输入到控制台,可以用单引号或双引号划定文本字符串。

echo "hello\n\n"
echo -e "hello\n\n"
echo "hello"
echo -n "hello"

在这里插入图片描述

4、变量

1)定义变量:变量名不加美元符号($)
your_name=“11hao”
注意,变量名和等号之间不能有空格
DATE=`date` #这种是动态变量

除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in `ls /etc` #后面的 ls /etc引用的符号不是单引号,是数字1前面那个键。是用来动态获取命令执行后的结果的。

2)使用变量
your_name=“qinjx”
#两种方式均可
echo $your_name
echo ${your_name} #加花括号是为了帮助解释器识别变量的边界
如:echo ${your_name} what

3)给变量传递参数
$1,$2,$3等,在shell代表传递的参数顺序

[root@vm01 test]# sh test.sh 11 hao

在这里插入图片描述

5、注释

以“#”开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号

6、字符串

字符串是shell编程中最常用最有用的数据类型
字符串可以用单引号,也可以用双引号,也可以不用引号

单引号字符串的限制:
·单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
·单引号字串中不能出现单引号(对单引号使用转义符后也不行)

1)字符串操作
拼接字符串
your_name=“11hao”
greeting=“hello, “$your_name” !”
greeting_1=“hello, ${your_name} !”
echo $greeting $greeting_1

获取字符串长度
string=“abcd”
echo ${#string} #输出:4

提取子字符串
string=“alibaba is a great company”
echo ${string:1:4} #输出:liba

7、转义符

用反斜杠可以转移shell里面的一些特殊的符号,比如说要正确打印$符号,那么在前面加一个反斜杠即可。

8、date日期函数

按照格式输出
today=$(date +%y%m%d)
或者
today=`date +%y%m%d`

在这里插入图片描述

9、管道

可以通过 | 把一个命令的输出传递给另一个命令做输入。
提示:awk里面的$1,表示输出第一列
df -k | awk ‘{print $1}’ | grep -v “文件系统”

在这里插入图片描述

10、tee

tee命令把结果输出到标准输出,且生成一个副本到相应文件
tee -a a.txt表示追加操作。
awk ‘{print $1}’ 表示打印第一列

df -k | awk '{print $1}' | grep -v "文件系统" | tee a.txt
df -k | awk '{print $1}' | grep -v "文件系统" | tee -a a.txt

在这里插入图片描述

11、文件重定向

">",">>":第一个表示覆盖,第二个表示追加

 > file.txt 把标准输出重定向到新文件中 
 >> file.txt 追加 

在这里插入图片描述

二、Shell基本语法

1、f/then/elif/else/fi

在Shell中用if、then、elif、else、fi这几条命令实现分支控制
案例一:

#!/bin/bash
if [ -f /bin/bash ]
then 
   echo "/bin/bash is a file"
else 
    echo "/bin/bash is NOT a file"
fi
if :; then echo "always true"; fi

在这里插入图片描述


“:”是一个特殊的命令,称为空命令,该命令不做任何事

案例二:

#!/bin/bash

echo "Is it morning? Please answer yes or no."
read YES_OR_NO
if [ "$YES_OR_NO" = "yes" ]; then
    echo "Good morning!"
elif [ "$YES_OR_NO" = "no" ]; then
    echo "Good afternoon!"
else
    echo "Sorry, $YES_OR_NO not recognized. Enter yes or no."
    exit 1
fi
exit 0

在这里插入图片描述


read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中

2、case/esac

#!/bin/bash

echo "Is it morning? Please answer yes or no."
read YES_OR_NO
case "$YES_OR_NO" in
yes|y|Yes|YES)
    echo "Good Morning!";;
[nN]*)
    echo "Good Afternoon!";;
*)
    echo "Sorry, $YES_OR_NO not recognized. Enter yes or no."
    exit 1;;
esac
exit 0

在这里插入图片描述


esac表示case语句块的结束。

3、for/do/done、做分隔

#!/bin/bash
s="ruoze,jepson,xingxing,dashu,xiaoshiqi,xiaohai"
OLD_IFS="$IFS"
IFS=","
arr=($s)
IFS="OLD_IFS"

for x in ${arr[*]}
do
        echo $x
done

在这里插入图片描述

4、while/do/done

#! /bin/sh

echo "Enter password:"
read TRY
while [ "$TRY" != "secret" ]; do
    echo "Sorry, try again"
    read TRY
done

在这里插入图片描述

5、break和continue

break跳出,continue跳过。 continue跳过本次循环,但不会跳出循环

#! /bin/sh

echo "Enter password:"
COUNTER=0
read TRY
while [ "$TRY" != "secret" ]; do
    COUNTER=$(($COUNTER+1))
    if [ $COUNTER -eq 5 ]
    then    
        echo "Sorry, permission denied"
        break
    else
        echo "Sorry, try again"
        read TRY
    fi
done
echo "identity varified"

在这里插入图片描述


在这里插入图片描述

6、位置参数和特殊变量

$0 相当于C语言main函数的argv[0]
$1、$2… 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]…
$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@ 表示参数列表”$1” “$2” …,例如可以用在for循环中的in后面。
$* 表示参数列表”$1” “$2” …,同上
$? 上一条命令的Exit Status
$$ 当前进程号

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐