Shell 从入门到精通(一)

2023-10-29

1、脚本的基本格式

新建一个文件vim wenwen,往文件里写如下代码:

#!/bin/bash
echo "wenwen successful!"

给文件权限,执行文件

chmod 755 wenwen
./wenwen

2、脚本的执行方式

每个程序都有自己的解释器,shell的执行方式有以下几种:

sh            //与bash一样,不需要太添加权限,使用解释器直接解释
bash          //不需要添加权限,使用解释器直接解释
./            //需要添加执行权限
#!/bin/bash   //需要添加执行权限,只是为了系统好识别

3、变量

(1)自定义变量

1、定义变量:变量名=变量值
2、引用变量:$变量名 或者 ${变量名}
3、查看变量:echo $变量名
4、取消变量:unset 变量名 作用范围:仅在当前shell中生效

判断IP是否可以ping通

#!/bin/bash
$IP=192.168.1.1
ping -c1 $IP &>/dev/null && echo "ip $IP ok!" || echo "ip $IP error!"

(2)系统环境变量

1、定义环境变量:export 变量名,将自定义变量转化成环境变量
2、引用环境变量:$变量名 或者 ${变量名}
3、查看环境变量:echo $变量名 env | grep name
4、取消环境变量:unset 变量名
5、变量作用范围:当前shell和子shell

export IP=192.168.1.1
#!/bin/bash
ping -c1 $IP &>/dev/null && echo "ip $IP ok!" || echo "ip $IP error!"

(3)位置变量

$1,$2,$3,$4,$5,$6,$7,$8,$9,$10

#!/bin/bash

ping -c1 $1 &>/dev/null

if [ $1 -eq 0 ];then
        echo "$1 ok!"
else
        echo "$1 err!"
fi

//执行该脚本   bash wenwen 1.1.1.1
 结果:1.1.1.1 ok!
#!/bin/bash
echo $1
echo $2
echo $3
ping -c1 $1 &>/dev/null

if [ $? -eq 0 ];then
        echo "$1 ok!"
else
        echo "$1 err!"
fi

//执行该脚本 
sh wenwen test              输出:test
sh wenwen test test1        输出:test test1
sh wenwen test test1 test2  输出:test test1 test2

(4)预先定义变量

$0 脚本文件名(三颗心)
$* 所有的参数
$@ 所有的参数
$# 参数的个数(四颗星)
$$ 当前进程的pid
$! 上一个后台进程的pid
$? 上一个命令的返回值,0代表成功(上面用过 五颗星)

执行该脚本:

echo "第 3 个位置参数是 $3"
echo "第 2 个位置参数是 $2"
echo "第 1 个位置参数是 $1"
echo "所有的参数是:$*"
echo "所有的参数是:$@"
echo "参数的个数是:$#"
echo "当前进程的 PID 是:$$"
echo '$4='$4
echo '$5='$5
echo '$6='$6
echo '$*='$*
echo '$#='$$
echo '$$='$$

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell 从入门到精通(一) 的相关文章

  • VBA:如何从 MS Access 运行另一个应用程序

    我一直在试图解决这个问题 但似乎我在任何地方都找不到解决该问题的方法 这是第一部分 VBA Shell 命令始终返回 找不到文件 https stackoverflow com questions 10439024 vba shell co
  • Shell脚本通过curl调用API并处理响应

    我需要创建一个通过curl 调用我的登录API 的shell 脚本 该脚本应该能够存储和处理来自curl api 调用的响应 myscript sh bin bash echo Extract bearer token from curl
  • 如何安装 Node 和 NPM 以便不必使用 sudo?

    我正在尝试在 Ubuntu 14 04 计算机上设置 Node js 和 NPM 但遇到了一些问题 在我的第一次尝试中 我不断得到EACCES尝试安装软件包时出错 有时甚至使用sudo 所以我彻底卸载了node和npm 现在我正在尝试找出如
  • 过滤 stderr 并获取初始返回代码

    在 shell 脚本中 我必须运行一个命令 我需要确定返回码是什么 但事实证明该命令的输出会发送到 stderr 并且还会输出用户的密码 不幸的是 这是命令的一个参数 不好 我知道 我至少想过滤掉密码 使其不被显示回来 cmd OPTION
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何排除文件/文件夹以删除[重复]

    这个问题在这里已经有答案了 如何删除文件夹中的所有内容并排除特定文件夹和文件 以 tar 为例 tar exclude folder 编辑 我可以删除文件和文件夹 注意 运行以下命令时请小心 find type f grep v NameT
  • Linux 和 Windows 上的相同计算 --> 结果不同

    我编写了以下算法来将十进制值转换为二进制 十六进制等 string toFormatFromDecimal long long t Format format int digitCount ceil log t log int format
  • Cakephp cron 作业调用控制器的操作

    几个月前我开始使用 CakePHP 1 2 为公司的应用程序添加一些小功能 但我对它不太熟悉 我们先在开发服务器上进行本地测试 然后再合并到生产服务器 我希望每小时调用一个控制器操作 通过我的研究 我认为这是最好的方法 即 cron 作业
  • 如何解决错误:psycopg2 构建轮失败?

    我遇到问题了psycopg2 的构建轮子 thru pip install r requirements txt 我使用的是 ubuntu 20 04 python 3 8 5 venv 这是我的要求 txt amqp 2 6 1 anyj
  • 无法在 Jenkins 管道作业中通过 DSL (groovy) 存储 sh 命令输出

    我想获得管道 Jenkins 作业中的最后构建输出并附加在电子邮件中 使用 emailext 插件 Curl 工作正常并提供正确的构建输出 但我无法存储在变量中以附加在电子邮件中 我正在使用最新的詹金斯版本 我可以看到有几个关于简单 sh
  • Windows 卷曲批处理文件

    我想使用 Windows 批处理文件进行 mailgun 卷曲调用 由于Windows shell不支持多行 如何在Windows批处理文件中执行以下curl函数 curl s user api key xxxxxxxxxx https a
  • 使用 C++ 更改终端字体大小

    我正在用 C 做一个小项目 在 Ubuntu 11 04 中 该程序是基于文本的 全部在 Gnome 终端中 我正在使用 ncurses 库来更改字体颜色 但我也想将不同大小的文本打印到终端 并且不知道如何使用 ncurses 来做到这一点
  • 从 Bash 中的字符串中删除固定前缀/后缀

    我想从字符串中删除前缀 后缀 例如 给定 string hello world prefix hell suffix ld 我如何得到以下结果 o wor prefix hell suffix ld string hello world f
  • 使用 localinstall 更新 yum 包

    如果使用安装包yum 本地安装像这样 yum y localinstall nogpgcheck some package 1 0 0 rpm 现在 如果我尝试运行 yum y localinstall nogpgcheck some pa
  • 抓取每 4 个文件

    我有来自 webcan screeb 抓取器的 16 000 张 jpg 文件 我让它运行了一年 指向过去的一年 我想找到一种方法来抓取每第四张图像 以便我可以将它们放入另一个目录中 以便以后可以将它们变成电影 Linux 下是否有一个简单
  • 运行“read PATH”后出现“ls:未找到”

    我正在尝试编写一个小脚本来列出给定变量中的目录 然而我却跑不了ls在读取我对变量的输入之后PATH system bin sh echo enter directory for listing read PATH ls PATH R gt
  • 按 bash 中的“最后一个”值分组

    我有一个两列的文件 1 112 1 123 2 123 2 124 2 144 3 158 4 123 4 158 5 123 我需要知道每列 1 的最后一列 2 值 1 123 2 144 3 158 4 158 5 123 如何做到这一
  • 如何在 Linux 上的 php 中启用 --enable-soap?

    这就是问题所在 我在 Apache 上安装了 PHP 5 2 9 但无法升级 PHP 有没有办法在 PHP 5 2 9 中启用 SOAP PHP 手册中说 要启用 SOAP 支持 请使用 enable soap 配置 PHP 这根本没有帮助
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • 将 shell 转义的参数字符串传递给 Bourne shell 中的子命令

    假设我有一个要运行的命令 cmd 和一个包含我想要传递给函数的参数的变量 类似于 foo bar baz qux 就像这样 bin sh command cmd args foo bar baz qux 参数包含引号 如上所示 将包含空格的

随机推荐