杜锦余的个人空间 https://blog.eetop.cn/1788615 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

for_Shell

热度 10已有 470 次阅读| 2023-8-7 18:04 |个人分类:工具|系统分类:芯片设计

#2023.8.7---------------------------------------------------


一个用 C 语言编写的程序,命令语言,用户使用 Linux 的桥梁,sh是一种Unix Shell

Shell 脚本(shell script)是为shell编写的脚本程序


C Shell(/usr/bin/csh)


Bourne Shell(/usr/bin/sh或/bin/sh)

↑↓这两个一般并不区分,即#!/bin/sh同样可改为#!/bin/bash,即Bash/Shell

#!/bin/sh

#!/bin/bash

Bourne Again Shell(/bin/bash)

#!                     #是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell


建文件test.sh        .sh扩展名不影响脚本执行,用php写shell脚本就.php


#!/bin/bash
echo "Hi makabaka !"                #echo   用于向窗口输出文本


执行Shell脚本


方法一:

①先在terminal把脚本改为可执行程序

chmod +x ./filename       #使脚本具有执行权限

②再执行

./filename                #执行脚本


方法二:

/bin/sh filename            #直接运行解释器
/bin/php filename
sh/bash   filename


Shell变量


  • 变量名和等号之间不能有空格

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头

  • 中间不能有空格,可以用下划线 _

  • 不能使用标点符号

  • 不能用bash里的关键字

your_name="dujinyu"         #变量名里不用加$

echo ${your_name}           #{}可以去掉,主要是为了帮解释器识别变量边界##好的编程习惯耶依!!#

$  ----------------定义变量

#!/bin/bash
name1="brooooo"
readonly name1           #readonly -------定义name1为只读变量,只读变量的值不能改变
name1="missssss"         #尝试修改变量值,执行时会报错


unset your_name           #unset  -----删除变量,不能删除只读变量,删除后下面不能再使用



变量类型


  1. 局部变量

    在该脚本中定义的,仅在当前shell脚本中有效,其他shell程序不能访问局部变量

  2. 环境变量

    所有程序都能访问环境变量,有些程序需要环境变量来保证其正常运行

  3. shell变量

    是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行



字符串


  • 单引号

date='today is 2023/0808'

单引号里的任何字符都会原样输出,单引号字符串中的变量无效

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用


  • 双引号

your_name="jinyu"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

双引号里可以有变量

双引号里可以出现转义字符


数组


读取数组的一般格式

valuen=${name[n]}



注释


以 # 开头的行就是注释,会被解释器忽略

:<<EOF                   #EOF可以改成任何其他的符号  ' !  等 
注释内容...
注释内容...
注释内容...
EOF



echo命令


用于字符串的输出


echo "city walk brooo"            #显示普通字符串


echo "\city walk broo\"              #显示转义字符  "city walk broo"


#!/bin/bash
read name 
echo "$name It is my cat"

以上代码保存为 test.sh,name 接收标准输入的变量

[dgg123 ~]# sh test.sh
DAGE                     #标准输入
DAGE It is my cat        #输出


echo -e "OK! \n"                     # -e 开启转义
echo "It is a test"                  #显示换行


#!/bin/sh
echo -e "OK! \c"                     # -e 开启转义        \c 不换行
echo "It is a test"


echo `date`                          # 反引号  `   ,显示命令执行结果




test命令


检查某个条件是否成立,数值、字符和文件三个方面


截图.PNG


num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi
#!/bin/bash

a=5
b=6

result=$[a+b]                          # 等号两边不能有空格      []执行基本的算数运算
echo "result 为: $result"


image.png

num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi


image.png

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

           !  非      -a  与       -o  或     

cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '至少有一个文件存在!'
else
    echo '两个文件都不存在'
fi



if else

if condition
then
    command1 
    command2
    ...
    commandN 
fi
if condition1
then
    command1
elif condition2          #if else语句
then 
    command2
else
    commandN
fi
if [ "$a" -gt "$b" ]; then          # [...] 判断语句中大于使用 -gt,小于使用 -lt
    ...
fi
if (( a > b )); then                #如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <
    ...
fi




for 循环


for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done



while 循环


while condition
do
    command
done


#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done



untill 循环


until condition
do
    command
done


#!/bin/bash

a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done


case...esac 


case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

两个分号 ;; 表示 break,即执行结束

使用星号 * 捕获该值,再执行后面的命令

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac



break 


#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break                   #允许跳出所有循环(终止执行后面的所有循环)
        ;;
    esac
done



continue 


它不会跳出所有循环,仅仅跳出当前循环

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done



点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 13

    好友
  • 3

    获赞
  • 0

    评论
  • 36

    访问数

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 12:18 , Processed in 0.013939 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部