Linux shell编程,这个命令if [ "$pid" ]; then...。什么时候if条件判断为true和false呢

Linux shell编程,这个命令if [ "$pid" ]; then...。什么时候if条件判断为true和false呢,第1张

只有当pid为空时,if条件才会为false。如果pid是程序获取的进程号,那么就是当进程存在时(pid不为空)为true,当进程不存在时(pid为空)为false。

1、pid=""

    if条件为false,如下面输出2:

    pid=""

    if [ "$pid" ]

    then

        echo "1"

    else

        echo "2"

    fi

2、pid=任何非空值

    if条件为true,如下面输出1:

    pid="0"

    if [ "$pid" ]

    then

        echo "1"

    else

        echo "2"

    fi

希望能够帮助到你,你的好评是我前进的动力,谢谢!

执行“nano testsh”创建一个新的shell脚本。

脚本testsh的内容如下:

#!/bin/sh

name=$1

echo "the ${name} are great man!"

给新创建的testsh的脚本赋可执行权限,命令为“chmod 755 testsh”。

执行'/testsh "xiao wang"'命令,可以看到自己编写脚本的结果“the xiao wang are great man!”。

"name=$1"中$1为系统提供的位置参数,$0代表程序的名称,[$1/$2/]从1开始为传递的参数。

linux系统除了提供位置参数还提供内置参数,内置参数如下: 

$# ----传递给程序的总的参数数目

$ ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

$ ----传递给程序的所有参数组成的字符串。

$n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 $0 ----当前程序的名称

$@----以"参数1" "参数2" 形式保存所有参数

$$ ----本程序的(进程ID号)PID

$! ----上一个命令的PID

常用命令

一、目录 *** 作

a) ls--查看文件/目录:

常用:ls –l 查看详细文件列表

b) pwd--查看当前目录:

c) cd--改变工作目录:

常用①:cd / 跳转到上一级目录

备注: [/]当前目录 [/]上一级目录

常用②:cd /boot/ 跳转到指定目录

备注:指定目录一定是完整路径,例如win的文件路径一样。

d) mkdir--创建目录:

常用:mkdir 123 创建一个空文件夹

e) rm--删除文件/目录:

常用: rm -rf 123 删除目录文件夹,并且目录下的文件一并删除。

备注:直接使用命令[rm],只能删除空目录。

-r 删除目录 -f 强制删除文件或目录

f) mv--移动文件/目录改名、移动:

移动文件: mv 1sh /123 à mv 目标文件 移动至某目录

重名命文件:mv 1sh 123sh à mv 原文件 欲改后文件

g) ln--建立软连接和硬连接:

软连接:ln -s 123sh / à ln -s 源文件 欲放置路径

如同window下的快捷方式,原理一致。

ln -s /root/桌面/共享文件夹/armQT/ /root/桌面

硬连接:ln 123sh / à ln 源文件 欲放置路径

复制一个文件,且该文件具有独立性,不受源文件删除的影响;无论源文件或目标文件的内容修改时,两份文件都会同步修改。

h) rmdir--删除空目录:

二、文件 *** 作

a)cat--查看文件内容,若文件不存在,创建对应文件:

常用:cat 1txt

b)cp--拷贝文件、目录:

备份:cp 123sh 1sh à cp 源文件 目标文件

复制至某路径:cp 123sh / à cp 源文件 目标路径

c)chmod--修改文件权限:

常用:chmod 777 1sh 给1sh最高权限

备注:读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。

777就是rwxrwxrwx,意思是该登录用户(可以用命令id查看)、他所在的组和其他人都有最高权限。

一般模式:chmod +rw 1sh 仅当前用户下1sh具有可读写权限

d)touch--创建文件:

常用:touch /1sh à touch 路径+名称

f)vim--创建并打开文件:

常用:vim /1sh à vim 路径+名称

g)find--在指定目录查找符合条件的文件:

以[文件名+类型]寻找:find / -name “”à find 路径 -nama “预找文件名+类型”

寻找文件名为”123”的文件,代表不限制类型

find / ! -name “txt” à 过滤txt类型文件后,显示其他文件

备注:-name 区分大小写 -iname 不区分大小写

-o 连接符,作用如下图

以[文件名]寻找:find / -path “1”à find 路径 - path “预找文件名”

寻找文件名为”1”的所有文件

根据文件类型进行搜索:find -type 类型参数

h)grep--在文件里查找内容:

从指定文件里查找内容:grep h /filetxt à grep 内容 路径

从缓存区里查找内容:ps -ef | grep 5799 à 某显示命令 | grep 内容

(从进程列表中寻找带有”5799”的文本行)

i)tar--解压文件:

压缩:

tar -cvf 1tar //将目录里所有文件打包成1tar

rar a 1rar //rar格式的压缩

zip 1zip //zip格式的压缩

解压:

tar -xvf filetar //解压tar包

tar -xzvf filetargz //解压targz

unrar e filerar //解压rar

unzip filezip //解压zip

j)file--显示指定文件的类型:

三、用户系统及权限管理 *** 作

a)su--用户类型切换:

b)adduser--添加用户:

c)passwd--设置(更改)用户口令:

d)usermod--设置用户属性:

e)ps--显示当前系统用户进程列表:

常用:ps -ef 显示当前系统所有用户的详细进程

-e 显示所有程序。 -f 显示UID,PPIP,C与STIME栏位

-A 显示所有程序。

f)kill--删除执行中的进程:

常用:kill 123 à kill pid号

强制结束进程: kill -9 123 à kill -9 pid号

四、帮助命令

a)man--查询命令阅读手册

man kill à 查询有关[kill]的全部信息

man 2 kill à 只查询第二条有关[kill]的信息

b)help--查询命令阅读手册

五、网络相关命令

a)ifconfig 查看网络信息,设置ip

b)ping 测试网络联网状态

六、U盘 *** 作相关命令

a)fdisk -l 识别usb存储设备

b)mount –t vfat /dev/sdb /mnt/udisk使用mount命令挂载U盘

c)umount /mnt/udisk 卸载U盘

七、安装软件包命令

a)rpm

常用组合命令:

-ivh:安装显示安装进度--install--verbose--hash

-Uvh:升级软件包--Update;

-qpl: 列出RPM软件包内的文件信息[Query Package list];

-qpi:列出RPM软件包的描述信息[Query Package install package(s)];

-qf:查找指定文件属于哪个RPM软件包[Query File];

-Va:校验所有的 RPM软件包,查找丢失的文件[View Lost];

-e:删除包

uWSGI 通过 xxxini 启动后会在相同目录下生成一个 xxxpid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

启动:

uwsgi --ini xxxini

重启:

uwsgi --reload xxxpid

停止:

uwsgi --stop xxxpid

以上是当前网上对于uwsgi重启 *** 作的最常见的描述,但是笔者通过ini文件启动时发现并没有生成xxxpid文件。于是自然的想法是通过shell脚本获取进程号并进行kill *** 作,脚本如下:

获取进程号的命令需要包含在``或$()之间,笔者在此过程中遇到过两个问题,描述如下:

中变量未加双引号,加上双引号该问题解决。

fork,source和exec运行脚本时的差异 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的source 使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 child process 来执行 由于所有执行结果均于当前 process 内完成, 若 script 的环境有所改变, 当然也会改变当前 process 环境了exec 使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前process内执行, 但是 process 内的原代码剩下部分将被终止 同样, process 内的环境随script 改变而改变结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了1sh的脚本[sql]#!/bin/bash A=B echo PID for 1sh before exec/source/fork:$$ export A echo 1sh: /$A is $A case $1 in exec) echo using exe exec /2sh ;; source) echo using source /2sh ;; ) echo using fork by default /2sh ;; esac echo PID for 1sh after exec/source/fork:$$ echo 1sh: /$A is $A 2sh的脚本[sql]#!/bin/bash echo PID for 2sh: $$ echo 2sh get /$A=$A from 1sh A=C export A echo 2sh: /$A is $A 3 实验31 fork[sql]

以上就是关于Linux shell编程,这个命令if [ "$pid" ]; then...。什么时候if条件判断为true和false呢全部的内容,包括:Linux shell编程,这个命令if [ "$pid" ]; then...。什么时候if条件判断为true和false呢、如何获取传入给shell脚本的最后一个参数、shell基本命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10214230.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存