Linux shell 编程学习笔记

Rosalba ·
更新时间:2024-09-21
· 836 次阅读

一直以来都很像系统的学习一下 shell 脚本,以便方便的高效的管理服务器。

这次难得有时间和条件来学习,所以做好笔记。

一:shell 能做什么

 二:shell 脚本的几种执行方式,我们创建文件 start.sh,并且赋予 执行权限

chomd +x start.sh #然后可以通过以下命令执行 #相对路径,或者绝对路径 ./start.sh #一个脚本范例,&& 表示的是逻辑判断,表示前面执行成功才会执行 #当然也可以用分号,但是不代表逻辑判断,前面执行成功与否都会执行 # || 代表逻辑否,就是前面失败执行 ping -c1 8.8.8.8 && echo "the network is ok" || echo "network is down"

这样的话,会附带执行结果输出如下:

PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data. 64 bytes from 114.114.114.114: icmp_seq=1 ttl=78 time=31.4 ms --- 114.114.114.114 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 31.484/31.484/31.484/0.000 ms network is down

但是如果我们不想在输出中看到执行过程,我们可以写出如下:

ping -c1 114.114.114.114 &>/dev/null && echo "success 163"

执行脚本的方式如下几种:

bash start.sh sh start.sh ./start.sh 绝对路径执行 #我们可以通过 which bash 来查询执行脚本位置

但是我们无法通过 python 命令来执行,原因如下:

#我们使用命令来查看脚本环境路径 which bash /usr/bin/bash which python /usr/bin/python which perl /usr/bin/perl

如果脚本默认顶部指定执行环境,那么默认采用的是 bash 环境

#默认指定,官方说法叫做 SheBang ,定义此脚本用哪个解释器来执行 #切记,只有第一行才是解释器 #!/usr/bin/bash #如果需要 python 命令来执行,那么需要这样写 #!/usr/bin/python #范例 #!/usr/bin/python print('This is python shell') #如果不指定解释器,默认为 shell 执行

几种程序语言执行的对比

Bash 中调用 python Expect

#解析来我们来合并两段代码 cat python.sh >> start.sh #得到如下代码 #!/bin/bash ping -c1 114.114.114.114 &>/dev/null && echo "success 163" #!/usr/bin/python print('This is python shell') #那么该怎么执行这段代码呢,可以将期间的 python 代码这样写 #技巧: -EOF 前面的 - 支持下面的缩进 /usr/bin/python <<-EOF print('This is python shell') EOF #在 python 中无法使用 shell 命令,python 语法比较严谨,会当成关键字

关于执行脚本已经伴随脚本中目录的改变,范例如下:

#新建脚本 bash.sh 并写入 #!/usr/bin/bash cd /home ls #然后给予权限 #先使用该命令执行 ./bash.sh #成功执行 #然后使用以下执行 . bash.sh #我们会发现,当前的目录已经产生变化 #第一个是新开的 shell 子进程中进行,第二个是在当前 shell 执行 #我们在写一个例子,新增别名 vim /root/.bashrc #在不执行 source 下怎么生效呢,可以使用以下 . /root/bashrc 或者 . ~/.bashrc

 Shell 特性 Nologin

 

#命令历史记忆功能 #上下键 查看上一条和下一条命令 #!number 先用 history 查看历史命令记录,然后在对应序号输入 !+number #!string 历史记录开头 比如输入 !d 会显示 !date #!$ 上一个命令的最后参数 #!! 上一个命令,和方向键上一样,主要在脚本中使用 # ctrl + R #别名功能 #alias #unalias cp 取消别名 #快捷键 Ctrl + R 搜索一个历史命令 Ctrl + D 退出 Ctrl + A 光标移动最前 Ctrl + E 光标移动到最后 Ctrl + L Ctrl + U 快速删除到开头 Ctrl + S 锁屏,盲打 Ctrl + K 快速删除到结尾 Ctrl + y #输入输出重定向

#注意 shell 不支持 ^开头查找,比如 ls ^f* # (shell) 在子 shell 命令中执行不会改变当前环境变量 #快捷复制,将指定的文件改名 cp -rv /root/aaa.sh(,.old) #使用 \ 转义,在命令行中会转义回车,就可以多行输入 #输出带有颜色,并重置 ,背景色是从40m 开始 echo -e "\e[1;31m This is a red text.\e[0m"

 变量 脚本中使用变量

#!/usr/bin/bash ip=114.114.114.114 ping -c1 $ip &>/dev/null && echo "$ip is up" || echo "$ip is down" #变量写法 #!/usr/bin/bash ip="8.8.8.8" if ping -c1 $ip &>/dev/null then echo "$ip is up" else echo "$ip id down" fi #窗口读入写法 #!/usr/bin/bash read -p "Please input a ip: " ip ping -c1 $ip &>/dev/null && echo "$ip is up" || echo "$ip is down" #参数传递,$1 开始接受参数 #/usr/bin/bash ping -c1 $q &>/dev/null if [ $? -eq 0 ] then echo "$1 is up" else echo "$1 is down' fi #执行 ./ping.sh 8.8.8.8

 环境变量及自定义变量

#环境变量和自定义变量,作用域和其他语言相同 a=1 export a #转换成环境变量也可以在写在一个脚本中,对变量加上 export 然后用 source 执行脚本 #常见使用方式为在一个脚本中引入一个脚本,比如 shell 在同一脚本下使用 #通过 . 的方式加载 . bash.sh #我们安装了某些软件包,需要在环境变量中使用,我们需要添加环境变量 vi /etc/profile #然后在底部 PATH=$PATH:/new/bin export PATH #然后执行 sorce /etc/profile #我们可以输入 env 命令来查找所有环境变量

变量、位置及预定义变量

#来一个简单范例 #!/usr/bin/bash #如果用户没有加参数 if [ $# -eq 0 ] echo "usage: `basename $0` file" fi

变量的赋值方式

#linux 内置了很都实用的环境变量,比如 $UID $USER $HOME $PWD ........ #Linux 没有变量类型和 PHP 一样,默认为字符串 #脚本中执行的两种方式 today=`date+%F` today=$(date+%F)

 变量的运算


作者:myarche



学习笔记 编程学习 Linux 学习 shell

需要 登录 后方可回复, 如果你还没有账号请 注册新账号