Shell脚本的基本例子

这篇具有很好参考价值的文章主要介绍了Shell脚本的基本例子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

大数据系列文章目录

定义变量,输出变量

#!/bin/bash
string='I am shell'
num=5
echo "a=${num},string=${string}"

输盘输入,执行Lunix命令

#!/bin/bash
echo 'who are you?'
read name #从键盘获取变量的值
pwd_string=$(pwd) #将当前绝对路径赋值给pwd_string变量
date_string=`date` #将当前时间赋值给date_string变量注意这里使用的是反引号
echo "hello,${name}"
echo $pwd_string
echo $date_string

变量禁止修改

#!/bin/bash
myUrl='http://www.google.com'
readonly myUrl
myUrl='http://www.google.com'

变量删除

#!/bin/bash
myUrl='http://www.google.com'
unset myUrl
echo "${myUrl}"

获取传递的变量

#!/bin/bash
echo "Shell 传递参数实例!";
echo "当前文件的名称:$0";
echo "第一个参数:$1";
echo "第二个参数:$2";
echo "第三个参数:$3";
echo "参数的个数:$#";
echo "传递的参数作为一个字符串显示*:$*";

字符串拼接,转义

#!/bin/bash
yourname="吴恩达"
wenhou_1="你好,$yourname."
wenhou_2="你好,"$yourname"."
wenhou_3="你好,\"$yourname\"."
echo $wenhou_1 $wenhou_2 $wenhou_3

获取字符串长度

#!/bin/bash
str="jobs"
echo "${str}"
echo "${#str}"
~              

截取字符串

#!/bin/bash
str="敢于亮剑绝不后退"
echo "${str:0:2}" #第一位数字是从几位开始,第二位数字是截取几位

查询字符串

#!/bin/bash
str="i am a boy"
echo `expr index "$str" io`

算术运算

#!/bin/bash
a=4
b=20
#加法运算
echo `expr $a + $b`
#减法运算
echo `expr $a - $b`
#乘法运算,注意*号前面需要反斜杠
echo `expr $a \* $b`
#除法运算
echo `expr $a / $b`
#此外,还可以通过$(())、$[]进行算术运算
echo "a = $a"
c=$((a+b))
d=$[a+b]
echo "c = $c"
echo "d = $d"

流程控制if

#!/bin/bash
if [ $(ps -ef | grep -c "ssh") -gt 1 ] #grep -c 用于统计字符串出现的次数
then
 echo "true"
fi
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
 echo "不存在${DIR}这个文件"
 mkdir -p $DIR
fi

流程控制if-else

#!/bin/bash
read -p "Enter you age(1-100) : " age
if [ $age -ge 18 ]
then
        echo '已经成年!'
else
        echo '未成年!'
fi

流程控制if-test

#!/bin/bash
echo "计算2个数是否相等!"
read -p '请输入第一个数:' num1
read -p '请输入第二个数:' num2
if [[ ! "$num1" =~ ^[0-9]+$ ]] || [[ ! "$num2" =~ ^[0-9]+$ ]]
then
        echo '请输入数字!!'
        exit
fi

if test $num1 -eq $num2
then
        echo '2个数相等'
else
        echo '2个数不相等'
fi

流程控制if-elif-else

#!/bin/bash
echo '请输入a的值'
read a
echo '请输入b的值'
read b

if [ $a == $b ]
then
        echo '2个数相等'
elif [ $a -gt $b ]
then
        echo 'a大于b'
elif [ $a -lt $b  ]
then
        echo 'b大于a'
else
        echo '没有符合的条件'
fi

#!/bin/bash
echo '判断成绩优、良、中、差'
read -p 'Enter you score(0-100):' n #-p表示给出提示信息
if [ $n -ge 85  ] && [ $n -le 100  ];then
        echo '优'
elif [ $n -ge 70  ] && [ $n -le 84  ];then
        echo '良'
elif [ $n -ge 60  ] && [ $n -le 83  ];then
        echo '中'
else
        echo '差'
fi

for循环

#!/bin/bash

echo '--------------------------------第一个for循环-------------------------------'

for loop in 1 2 3 4 5
do
        echo "$loop"
done

echo '--------------------------------第二个for循环--------------------------------'

for str in 'This is a string'
do
 echo "$str"
done

echo '--------------------------------第三个for循环--------------------------------'

for file in $(ls /root)
do
 echo $file
done

echo '--------------------------------第四个for循环--------------------------------'


for(( i = 1; i <=10; i++ ))
do
 echo $i
done

echo '--------------------------------第五个for循环--------------------------------'
echo '计算从1加到100的累加值'
s=0
for((i = 1; i<=100; i++))
do
s=$(($s + $i))
done
echo "从1加到100的和为:$s"

while循环

#!/bin/bash

echo '---------------------------------------第一个while循环----------------------------------'

num=1
while (( $num <= 5 )) 
do
echo $num
let num++
done

echo '--------------------------------------第二个while循环----------------------------------'

sum=0
i=1
while  [ $i -le 100 ]
do
 let sum=sum+$i
 let i++
done
echo "从1加到100之后的值为:$sum"

echo '--------------------------------------第三个while循环----------------------------------'

#while :
#do
#echo '我是无限循环'
#done

#while true
#do
#echo '我是无限循环'
#done

for((;;))
do
echo '我是无限循环'
done

case

#!/bin/bash
echo '请输入 1 到 4 之前的数字'
read num
case $num in
 1) echo '你选择了1'
 ;;
 2) echo '你选择了2'
 ;;
 3) echo '你选择了3'
 ;;
 4) echo '你选择了4'
 ;;
 *) echo '你没有输入1到4之间的数字'
 ;;
esac

break

#!/bin/bash

echo '输入1 到 5之间的数字,否则游戏结束'
while :
do
 echo -n "请输入 1 到 5 之间的数字:"
 read num
 case $num in
  1|2|3|4|5) echo "你输入的数字为:$num"
  ;;
  *) echo '你输入的数字不是1到5之间的game over'
   break
  ;;
 esac
done

continue

#!/bin/bash

while :
do
echo -n '请输入1 到 5之间的数字:'
read num
case $num in
 1|2|3|4|5) echo "你输入的数字为:$num"
 ;;
 *) echo "你输入的数字不是1到5之间的GameOver"
 continue
  echo '游戏结束'
 ;;
esac
done

function

#!/bin/bash

echo '---------------------------------这是第一个函数---------------------------'
function demoFun(){
 echo '这是一个函数'
}

echo '函数开始执行-------'
demoFun
echo '函数结束执行-------'

echo '--------------------------------这是第二个函数----------------------------'

function funWithReturn(){
 echo '这里的函数会对2个数进行相加运算'

 echo '输入第一个数字'
 read num1

 echo '输入第二个数字'
 read num2

 echo "两个数字分别为:$num1$num2"
 echo "两个数的和为:$((num1 + num2))"
 return $(($num1 + $num2))
}

funWithReturn

echo "退出状态码:$?!"


echo '--------------------------------这是第三个函数-----------------------------'

funWithParam(){
 echo "第一个参数为:$1 "
 echo "第二个参数为:$2 "
 echo "第十个参数为:$10 "
 echo "第十个参数为:${10}"
 echo "第十一个参数为:${11}"
 echo "参数的总数为:$# 个"
 echo "作为一个字符串输出所有的参数:$*"
}

funWithParam 1 2 3 4 5 99 78 989 132 123 12312

array

#!/bin/bash

my_array=("A" "B" "C" "D")

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

echo "my_array中第一个位置的值为:${my_array[0]}"
echo "array_name中第一个位置的值为:${array_name[0]}"

echo "my_array中的所有元素为:${my_array[*]}"
echo "array_name中所有元素为:${array_name[@]}"

echo "my_array数组的长度为:${#my_array[@]}"
echo "array_name数组的长度为:${#array_name[*]}"


echo "---------------遍历数组第一种方式------------------"

for var in ${my_array[*]}
do
echo "$var"
done

echo "---------------遍历数组第二种方式-----------------"

arrayNameLength=${#array_name[@]}
for (( i = 0; i < arrayNameLength; i++ ))
do
 echo "${array_name[$i]}"
done

select

#!/bin/bash

echo "What is your facourite OS?"
PS3="Please enter your choice:"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"
do
break;
done
echo "You have selected $var"

select 和 case

#!/bin/bash
echo "select和case结合使用!"
echo "你想学习什么语言?"
PS3="请输入你的选择:"
select var in java c++ python go javaScript;
do
case $var in
 "java")
  echo "恭喜你选择成功.java最牛"
  ;;
  "c++")
  echo "驱动开发 网路优化 C++ "
  ;;
  "python")
  echo "人工智能 机器学习 python"
  ;;
  "go")
   echo "性能之王 超越各种语言 未来发展支柱 go"
  ;;
  "javaScript")
  echo "发展悠久 久盛不衰 javaScript"
  ;;
  *)
  echo "你不是守规矩的人!!"
  ;;
 esac
 break; # 如果这里没有break 将会无限循环
done

echo "你选择的是:$var"

引用其他.sh文件

#!/bin/bash
source ./test23_array.sh

echo "---------------------------------------------测试引用包含其他文件----------------------------------------"
for var in ${my_array[*]}
do
 echo "测试引用包含其他文件:$var"
done

综合小案例

猜数字

游戏规则为:程序内置一个1到100 之间的数字作为猜测的结果,由用户猜测此数字。用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;直到用户猜对结果,则提示游戏结束。

#!/bin/bash


randomNumber_array[0]=1

for(( i = 1; i<100; i++))
do
randomNumber_array[i]=$((i+1))
done

#echo "randomeNumber_array:${randomNumber_array[*]}"


number=${randomNumber_array[RANDOM%100+1]}

while :
do
 read -p "计算机生成了一个 1‐100 的随机数,你猜: " readNum
 if [ $readNum -eq $number ]
  then
        echo "猜对了"
          break;
  elif [ $readNum -gt $number  ]
  then
        echo "大了"
  else
        echo "小了"
 fi
done

创建文件,并且拷贝到指定位置

写一个脚本,在用户目录下创建四个文件m1.txt,m2.txt,m3.txt,m4.txt,用Shell编程,实现自动创建m1,m2,m3,m4四个目录,并将 m1.txt,m2.txt,m3.txt,m4.txt四个文件分别拷贝到各自相应的目录下。

#!/bin/bash


for var in m1 m2 m3 m4;
do
  if [ -e "/home/$var"  ]
  then
        echo "$var已存在,开始删除...."
        $(rm -rf "/home/$var")
  fi
        echo "开始创建文件:$var.txt"
        $(touch "/home/$var".txt)
        echo "文件创建成功,等待5s后开始创建$var目录"
        $(sleep 5s)
        $(mkdir "/home/$var")
        echo "$var目录创建成功,等待5s后开始将/home/$var.txt拷贝到/home/$var"
        $(sleep 5s)
        $(mv "/home/$var".txt /home/$var)
        echo "拷贝成功!!"
done

统计/var/log中的文件个数,并打印文件名

写一个shell脚本,统计/var/log 有多少个文件,并显示这些文件名

#!/bin/bash

sum=0
for var in $(ls /var/log)
do
#if [ -f $var  ]
 #then
        sum=$((sum + 1))
        echo "$var"
#fi
done

echo "---------------------------------------------------"
echo "/var/log中共有$sum个文件"

用户输入3个数,并按从小到大依次输出

写一个shell脚本,依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字文章来源地址https://www.toymoban.com/news/detail-461615.html

#!/bin/bash

read -p "请输入第一个整数:" num_1

read -p "请输入第二个整数:" num_2

read -p "请输入第三个整数:" num_3

one=0
two=0
three=0
if [ $num_1 -ge $num_2  ]
then
        if [ $num_1 -ge $num_3 ]
        then
                three=$num_1
                if [ $num_2 -ge $num_3  ]
                then
                        two=$num_2
                        one=$num_3
                else
                        two=$num_3
                        one=$num_2
                fi
        else
                three=$num_3
                two=$num_1
                one=$num_2
        fi
else
        if [ $num_2 -ge $num_3  ]
        then
                three=$num_2
                if [ $num_1 -ge $num_3  ]
                then
                        two=$num_1
                        one=$num_3
                else
                        two=$num_3
                        one=$num_1
                fi
        else
                three=$num_3
                two=$num_2
                one=$num_1
        fi
fi
echo "-------------------------------------------------------------------"
echo "你输入的最大值为:$three"
echo "你输入的中间值为:$two"
echo "你输入的最小值为:$one"

到了这里,关于Shell脚本的基本例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【shell脚本】shell脚本之日志切割(进阶实战三)

    恭喜你,找到宝藏博主了,这里会分享shell的学习整过程。 shell 对于运维来说是必备技能之一,它可以提高很多运维重复工作,提高效率。 shell的专栏,我会详细地讲解shell的基础和使用,以及一些比较常用的shell技巧。 有需要的可以从这里开始,可以教会你如何去进行shel

    2024年02月15日
    浏览(10)
  • 【Docker】Docker 的基本概念和优势,基本命令及使用例子

    Docker 是一种轻量级的容器化解决方案,能够快速地创建、部署和运行应用程序。以下是一些 Docker 的基本概念和优势: 基本概念: 1.镜像:一个 Docker 镜像是一个可执行的文件,其中包含了运行应用程序所需要的一切。 2.容器:一个 Docker 容器是一个镜像的运行时实例。 3.仓

    2024年02月11日
    浏览(26)
  • Golang 基本常量声明及 iota 使用

    Golang 基本常量声明及 iota 使用

    普通声明时,与局部变量声明的方式一致: 多行常量声明时,如果常量值表达式为空,则会和前一个常量的值表达式相同。 iota 是常量声明时的一个自增的特殊变量; iota 在const 内部的第一行出现时,值为0,后续每新增一行,iota都会自增1。(可以理解为行索引或者行号)

    2024年02月13日
    浏览(13)
  • Rust变量、常量声明与基本数据类型

    Rust是一门系统级别的编程语言,注重安全性、性能和并发。在这篇博客中,我们将介绍Rust中的变量、常量声明以及基本数据类型,并通过示例说明每一种类型的用法。 在Rust中,使用 let 声明变量。变量默认是不可变的,要使其可变,需要使用 mut 。 常量使用

    2024年01月18日
    浏览(13)
  • Spring 声明式事务 @Transactional(基本使用)

    Spring 声明式事务 @Transactional(基本使用)

            声明式事务的实现很简单,只需要在需要事务的⽅法上添加 @Transactional 注解就可以实现了.⽆需⼿动开启事务和提交事务,进⼊⽅法时⾃动开启事务,⽅法执⾏完会⾃动提交事务,如果中途发⽣了 没有处理的异常会⾃动回滚事务.         废话不多说,直接看代码实现,

    2024年01月23日
    浏览(12)
  • Shell脚本编程实践——第3关:使用Shell脚本创建文件目录

    任务描述 本关任务:设计一个Shell程序,在/home目录下建立一个userdata目录,在userdata目录下再建立5个目录,即user1~user5,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 相关知识 为了完成

    2023年04月22日
    浏览(7)
  • 【Linux命令-shell】虚拟机中创建shell脚本、查看当前路径、执行脚本

    目录 一、创建shell脚本 二、查看当前的路径 三、执行脚本 一、创建shell脚本 shell脚本的特点 提前将可执行的命令语句写入一个文件中 顺序执行 解释器逐行解释代码 常见的脚本有:shell、python、PHP...... 注:用什么解释器就是什么脚本 编写shell脚本: 步骤: 1、新建文件 2、

    2024年02月05日
    浏览(51)
  • shell脚本实战案例---安全脚本

    例题:自动化禁止恶意IP访问         应用场景:防止恶意IP尝试ssh登录。---暴力破解密码         脚本说明:将密码输入错误超过4次的IP地址通过iptables防火墙阻止访问。 目录 1.脚本分析: 【1】首先ssh登录之后,产生的日志文件是哪个,模拟暴力破解密码会有什么提示

    2024年02月03日
    浏览(9)
  • 【Shell脚本4】Shell 传递参数

    【Shell脚本4】Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径): 为脚本设置

    2024年02月05日
    浏览(10)
  • Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)

    Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)

    vim-操作篇 进程概念篇 进程地址空间篇 Linux,是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用

    2024年02月03日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包