shell脚本及常用循环语句有哪些

发布时间:2021-09-26 17:22:38 作者:柒染
来源:亿速云 阅读:224

shell脚本及常用循环语句有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一.什么是shell及作用

Shell字面理解就是个“壳”,是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用户输入的命令翻译给系统执行。Linux中的shell与Windows下的DOS一样,提供一些内建命令(shell命令)供用户使用,可以用这些命令编写shell脚本来完成复杂重复性的工作

1.自动化管理的重要依据
2.追踪与管理系统的重要工
3.简单侦测功能
4.连续指令单一化
5.简易的数据处理
6.跨平台支持与学习历程较短

直接指令下达: shell.sh 件必须要具备可读与可执行(nx) 的权限,然后:
绝对路径:使用/home/dtsai/shell.sh 来下达指令;
相对路径:假设工作目录在/home/dmtsai/,则使用.shel.sh 来执行
*变量"PATH"功能:将shell.sh放在PATH指定的目录内,例如: ~/bin/
以bash程序来执行:通过“bash shell,sh”或“sh shell.sh "来执行

二.简单编辑shell

[root@localhost ~]# vim a.sh
#!/bin/bash
echo -e  "hellow \a \n" 
exit 0
[root@localhost ~]# chmod a+x a.sh 
[root@localhost ~]# sh a.sh 
hellow
  1. 第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称:

  2. 程序内容的说明:

  3. 主要环境变量的宣告:建议务必要将一些重要的环境变量设置好,我个人认为, PATH 与 LANG (如果有使用到输出相关的信息时)是当中最重要的!如此一来,则可让我们这支程序在进行时,可以直接下达一些外部指令,而不必写绝对路径呢!

  4. 主要程序部分就将主要的程序写好即可

  5. 执行成果告知(定义回传值)一个指令的执行成功与否,可以使用$?这个变量来观察~那么我们也可以利用 exit 这个指令来让程序中断,并且回传一个数值给系统

\a 发出警告声; \n 换行且光标移至行首;

对谈式脚本:变量内容由使用者决定量
随日期变化:利用date进行件的创建
数值运算:简单的加减乘除

对谈式脚本:变量内容由使用者决定量

[root@localhost ~]# vim b.sh
#!/bin/bash
read -p "Please input your first name: " firstname
read -p "Please input your last name: " lastname
echo -e "\nYour full name is: ${firstname} ${lastname}"
[root@localhost ~]# sh b.sh 
Please input your first name: x
Please input your last name: a

Your full name is: x a
[root@localhost ~]# vim x.sh
#!/bin/bash
echo -e "I will use 'touch' command to create 3 files." 
read -p "Please input your filename: "
fileuserfilename=${fileuser:-"filename"}
date1=$(date --date='2 days ago' +%Y%m%d)
date2=$(date --date='1 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)

file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}

touch "${file1}"
touch "${file2}"
touch "${file3}"

 filename: a
[root@localhost ~]# ls              \\可以看到创建了3天的件
20191203  20191205         a.sh  initial-setup-ks.cfg  公共  视频  档  音乐
20191204  anaconda-ks.cfg  b.sh  x.sh                  模板  图片  下载  桌面
[root@localhost ~]# vim q.sh
#!/bin/bash
echo -e "You SHOULD input 2 numbers, I will multiplying them! \n"
read -p "first number: " firstnu
read -p "second number: " secnu
total=$((${firstnu}*${secnu}))
echo -e "\nThe result of ${firstnu} x ${secnu} is ==> ${total}"
[root@localhost ~]# sh q.sh 
You SHOULD input 2 numbers, I will multiplying them! 

first number: 2
second number: 3

The result of 2 x 3 is ==> 6

shell脚本及常用循环语句有哪些

shell脚本及常用循环语句有哪些

shell脚本及常用循环语句有哪些

shell脚本及常用循环语句有哪些

三.循环语句

shell脚本及常用循环语句有哪些

案例:

[root@localhost ~]# vim x.sh 
#!/bin/bash
read -p "Please input (Y/N): " yn
if [ "${yn}" == "Y" ] || [ "${yn}" == "y" ]; then
echo "OK, continue" 
exit 0
fi
if [ "${yn}" == "N" ] || [ "${yn}" == "n" ]; then
echo "Oh, interrupt!" 
exit 0
fi
echo "I don't know what your choice is" && exit 0
[root@localhost ~]# sh x.sh 
Please input (Y/N): Y
OK, continue
[root@localhost ~]# sh x.sh 
Please input (Y/N): N
Oh, interrupt!
[root@localhost ~]# sh x.sh 
Please input (Y/N): asd
I don't know what your choice is

2.if条件语句的双分支结构由if、then、else、fi关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令,相当于口语的“如果……那么……或者……那么……”。if条件语句的双分支结构也是一种很简单的判断结构。

https://s1.51cto.com/images/blog/201809/17/e6093221273e0d416b0ee944c5e318c4.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

还用上面的案例:

[root@localhost ~]# vim x.sh
#!/bin/bash
read -p "Please input (Y/N): " yn
if [ "${yn}" == "Y" ] || [ "${yn}" == "y" ]; then
echo "OK, continue"
elif [ "${yn}" == "N" ] || [ "${yn}" == "n" ]; then
echo "Oh, interrupt!"
else
echo "I don't know what your choice is"
fi
[root@localhost ~]# sh x.sh 
Please input (Y/N): Y
OK, continue

3.if条件语句的多分支结构由if、then、else、elif、fi关键词组成,它进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令,相当于口语的“如果……那么……如果……那么……”。if条件语句的多分支结构是工作中最常使用的一种条件判断结构,尽管相对复杂但是更加灵活。

shell脚本及常用循环语句有哪些

案例:

[root@localhost ~]# vim a.sh
#!/bin/bash
if [ "${1}" == "hello" ]; then
echo "Hello, how are you ?"
elif [ "${1}" == "" ]; then
echo "You MUST input parameters, ex> {${0} someword}"
else
echo "The only parameter is 'hello', ex> {${0} hello}"
fi
[root@localhost ~]# sh a.sh    \\可以看到必须加参数才能执行
You MUST input parameters, ex> {a.sh someword}
[root@localhost ~]# sh a.sh hello
Hello, how are you ?

利用if... then:网络状态

[root@localhost ~]# vim netstat.sh
#!/bin/bash
echo "Now, I will detect your Linux server's services!"
echo -e "The www, ftp, ssh, and mail(smtp) will be detect! \n"

testfile=/dev/shm/netstat_checking.txt
netstat -tuln > ${testfile}
testing=$(grep ":80 " ${testfile})         \\侦测80端口是否存在
if [ "${testing}" != "" ]; then
echo "WWW is running in your system."
fi
testing=$(grep ":22 " ${testfile})          \\侦测22端口是否存在
if [ "${testing}" != "" ]; then
echo "SSH is running in your system."
fi
testing=$(grep ":21 " ${testfile})          \\侦测21端口是否存在
if [ "${testing}" != "" ]; then
echo "FTP is running in your system."
fi
testing=$(grep ":25 " ${testfile})
if [ "${testing}" != "" ]; then
echo "Mail is running in your system."
fi
[root@localhost ~]# sh netstat.sh 
Now, I will detect your Linux server's services!
The www, ftp, ssh, and mail(smtp) will be detect! 

SSH is running in your system.               \\看到ssh正在系统中运行
Mail is running in your system.                \\邮件服务正在系统中运行

shell脚本及常用循环语句有哪些

for...do...done(固定循环)

案例:
假设我有三种动物,分别是 dog, cat, elephant 三种,我想每一行都输出这样:“There are dogs...”之类的字样,则可以:

[root@localhost ~]# vim w.sh
for animal in dog cat elephant
do
echo "There are ${animal}s.... "
done
[root@localhost ~]# sh w.sh 
There are dogs.... 
There are cats.... 
There are elephants....

shell脚本及常用循环语句有哪些

while... do...done,until...do...done(不定循环)
While:当满足后面条件时才进行循环
Until:当不满足后面条件时才进行循环

案例:
假设我要让使用者输入 yes 或者是 YES 才结束程序的执行,否则就一直进行告知使用者输入字串。

[root@localhost ~]# vim s.sh
#!/bin/bash
while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
do
read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."
[root@localhost ~]# sh s.sh 
Please input yes/YES to stop this program: asd
Please input yes/YES to stop this program: asd
Please input yes/YES to stop this program: YES
OK! you input the correct answer.

case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;而如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令。

shell脚本及常用循环语句有哪些

利用case .... esac判断

[root@localhost ~]# vim aa.sh
#!/bin/bash
case ${1} in
"hello")
echo "Hello, how are you ?"
;;
"")
echo "You MUST input parameters, ex> {${0} someword}" 
;;
*)
echo "Usage ${0} {hello}" 
;;
esac
[root@localhost ~]# sh aa.sh 
You MUST input parameters, ex> {aa.sh someword}
[root@localhost ~]# sh aa.sh hello
Hello, how are you ?

一般来说,使用“ case $变量 in ”这个语法中,当中的那个“ $变量 ”大致有两种取得的方式:
直接下达式:例如上面提到的,利用“ script.sh variable ” 的方式来直接给予 $1 这个变量的内容,这也是在 /etc/init.d 目录下大多数程序的设计方式。
互动式:通过 read 这个指令来让使用者输入变量的内容。

让使用者能够输入 one, two, three ,并且将使用者的变量显示到屏幕上,如果不是 one, two, three 时,就告知使用者仅有这三种选择。

[root@localhost ~]# vim bb.sh
#!/bin/bash
echo "This program will print your selection !"
#read -p "Input your choice: " choice
#case ${choice} in
case ${1} in 
   "one")
        echo "Your choice is ONE" 
        ;;    "two")         echo "Your choice is TWO"         ;; 
   "three") 
        echo "Your choice is THREE" 
        ;; 
   *)
        echo "Usage ${0} {one|two|three}" 
        ;;
esac
[root@localhost ~]# sh bb.sh 
This program will print your selection !
Usage bb.sh {one|two|three}
[root@localhost ~]# sh bb.sh one
This program will print your selection !
Your choice is ONE
[root@localhost ~]# sh bb.sh two
This program will print your selection !
Your choice is TWO

函数的定义

        
     在shell 中有两种定义函数的语法格式,分别为:

        函数名()
        {
          命令序列
          }

       或者:

        function 函数名()     /function 可以不写
         {
          命令序列
          }

函数定义好后,用户可以在shell 中直接调用,调用时不用带上()

调用语法
          函数名   参数1   参数2 ....

 函数中的变量
           均为全局变量,没有局部变量

 函数的调用
           可以传递参数,在函数中用$1,$2, $3...来引用传递的参数。

还用上面的案例:用函数调用实现

[root@localhost ~]# vim cc.sh
#!/bin/bash
function printit(){
echo -n "Your choice is "
}

echo "This program will print your selection !"
        case ${1} in
         "one")
         printit; echo ${1} | tr 'a-z' 'A-Z'            \\将参数的大小写转换
        ;;   "two")
        printit; echo ${1} | tr 'a-z' 'A-Z'
        ;;
        "three")
        printit; echo ${1} | tr 'a-z' 'A-Z'
        ;;
        *)
        echo "Usage ${0} {one|two|three}" 
        ;;
esac
[root@localhost ~]# sh cc.sh 
This program will print your selection !
Usage cc.sh {one|two|three}
[root@localhost ~]# sh cc.sh one
This program will print your selection !
Your choice is ONE
[root@localhost ~]# sh cc.sh two
This program will print your selection !
Your choice is TWO
sh执行的选项与参数:

-n :不要执行script(脚本),仅查询语法的问题
-v :在执行script前,先将脚本的内容输出到屏幕上
-x :将使用到的脚本内容显示到屏幕上,

案例:

[root@localhost ~]# sh -n aa.sh    \\不报错证明正常

[root@localhost ~]# sh -v aa.sh   \\输出到屏幕上
#!/bin/bash
case ${1} in
"hello")
echo "Hello, how are you ?"
;;
"")
echo "You MUST input parameters, ex> {${0} someword}" 
;;
*)
echo "Usage ${0} {hello}" 
;;
esac
You MUST input parameters, ex> {aa.sh someword}

[root@localhost ~]# sh -x cc.sh    \\可使用的输出屏幕上
+ echo 'This program will print your selection !'
This program will print your selection !
+ case ${1} in
+ echo 'Usage cc.sh {one|two|three}'
Usage cc.sh {one|two|three}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. Shell脚本之Case和循环语句
  2. shell脚本--------while循环语句

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

shell脚本

上一篇:如何配置代理设置

下一篇:如何理解Arch Linux

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》