OpenEuler HCIA——使用Shell脚本

许茂才
2023-12-01

1.Shell概述

Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口
Shell 将用户输入的命令并且把它们送到内核执行,然后返回执行结果
Shell 是可编程的,它允许用户编写由shell命令组成的程序

默认shell
/etc/shells

当前登录用户默认shell
echo $SHELL

当前shell
echo $0

2.Shell脚本基础知识

1)解释器:Shell脚本是静态代码,若要输出结果,还需要解释器参与
一般脚本第一行,指定执行此脚本的解释器

如果不指定解释器,脚本也能在默认解释器中运行

#!/bin/bash    #!/bin/csh

2)脚本执行方式
sh 1.sh
./1.sh

他人的脚本,需要可执行权限“X” 

后台执行脚本符:&

./1.sh &

nohup ./1.sh & 可在退出shell后,脚本仍保持运行

---------------------------------------------------------------------------------------------------------------------------------
shell 编辑基础

1)输入输出、管道
文本流端口:标准输入、标准输出、标准错误

例:date 命令
date 为标准输入
date的结果为标准输出
datee为标准错误(输入输出)

输出重定向
将date标准输出定向到date.txt文件中
date > date.txt

将标准输出追加到date.txt文件中
date >> date.txt

输入重定向
date.txt做为wc命令的输入对象
wc < date.txt (效果等同于cat date.txt | wc)

内联输入重定向
分屏显示你输入的内容,直接出现某标记(EOF)后中止输入
less << EOF

管道符“|”:将一个命令的输出,做为另一个命令的输入
cat date.txt | wc

2)Shell中的字符
# 注释,只用做说明
' 字符串引用,echo 'i am leon!he is nancy' 
\ 转义符,使特殊符号失去本身意义     echo \$abc
/ 路径分隔符
! 反逻辑符(反义词)
" 也是字符串引用

单引号' 与 双引号" 区别
单引号不能调用字符串中的变量
双引号可以调用字符串中的变量

变量$

变量赋值
a='hello world'
echo a
echo $a

取消赋值
unset a

变量的类型:环境变量,用户自定义变量

a='hello world'
echo 'i am $a teacher'
echo "i am $a teacher"

命令替换

vim 1.sh

#!/bin/bash

b=`date` (反引号)Esc键下的~ 英名输入
echo $b

效果等同于
b=$(date)
echo $b

变量替换

A=Linux
echo $AB  #表示变量AB

echo ${A}B
LinuxB

3)shell运算符
+ - * / % = == !=

关系运算符
-eq (equal)等于
-ne (no equal)不等于
-gt (greater than)大于
-lt (less than)小于
-ge (greater equal)大于等于
-le (less equal)小于等于

布尔运算条款
!   “非”运算

#!/bin/bash
a=10
b=20

if [ $a != $b ]
then
  echo "$a != $b : a is no equal to b"
else
  echo "$a != $b : a is equal to b"
fi

---------------------------------------------------------------------------------------------------------------------------------
循环语句
1)if条件语句 

语法:
if 命令
  then
    命令
fi

示例:
vim guess.sh

#!/bin/bash
a=3
b=$1
if [ $a == $b ]
then
        echo "you win"
else
        echo "please guess again"
fi

. guess.sh 1
. guess.sh 2
. guess.sh 3


请输入值1到9


多条件判断语句
cat 值 in (
   范围)命令;
   范围 命令
esac

2)for循环
for 变量 in 列表
do
    command1
    command2
    ...
done

3)while循环 
用于不断执行一系列命令,也用于从输入文件中读取数据

---------------------------------------------------------------------------------------------------------------------------------
脚本实例
while + if 

判断位置参数是否是一个文件,如果是,则输出文件内容,否则提示

vim wf.sh
#!/bin/bash
while [ $1 ]
do
        if [ -f $1 ]
        then echo "display:$1"
                cat $1
        else echo "$1 is not a file name"
        fi
        shift
done

. wf.sh guess.sh

#shift的意义,当输入的参数执行完之后,抛弃
 

 类似资料: