![Linux shell编程,这个命令if [ "$pid" ]; then...。什么时候if条件判断为true和false呢,第1张 Linux shell编程,这个命令if [ "$pid" ]; then...。什么时候if条件判断为true和false呢,第1张](/aiimages/Linux+shell%E7%BC%96%E7%A8%8B%EF%BC%8C%E8%BF%99%E4%B8%AA%E5%91%BD%E4%BB%A4if+%5B+%26quot%3B%24pid%26quot%3B+%5D%3B+then...%E3%80%82%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99if%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD%E4%B8%BAtrue%E5%92%8Cfalse%E5%91%A2.png)
只有当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基本命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)