IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> SHELL 脚本(1) -> 正文阅读

[系统运维]SHELL 脚本(1)

SHELL 脚本 编程(1)

检测命令是否执行成功

#!/bin/bash
#filename:successTest.sh
CMD="command" #command is the test order
$CMD
if [ $? -eq o ];
then
echo "CMD executed successfully"
else
echo "$CMD terminated unsuccessfully"
fi

echo $?
$?会给出上一次执行命令的返回值 如果命令成功退出那么退出的状态为0,否则为非0.

读取序列输出

$cmd1 | cmd2 | cmd3

$ls  | cat -n > 1.txt
     1.txt
     2  20210909.sh
     3  20210910.sh
     4  a1
     5  a2
     6  a3
     7  lib1
     8  lib2
     9  lib3
     10  nohup.out
     11  test2.sh
     12  test.sh
     13  userdata

cmd_output=$(ls | cat -n)
cmd_output=ls | cat -n
echo $cmd_output

利用shell成立一个独立的进程

可以使用()操作符来定义一个子shell
pwd
(cd /bin; ls)
pwd
::当前目录不会改变

通过引用子shell的方式保留空格和换行符

  • 当我们使用子shell或反引用的方法将命令的输出读入一个变量中,可以将它放入双引号中,以保留空格和换行符(\n) ???
$cat 1.txt
1
2
3

out=$(cat 1.txt)
echo o u t o u t 1 = " out out1=" outout1="(cat 1.txt)"
echo $out

## READ命令

从输入中读取n个字符并存入变量variable

read -n numChars variable

examole:

read -n 2 var
echo $var

在这里插入图片描述

用不回显(non-echo)的方式读取要保护的信息(密码)

read -s var
输入数据到var(终端不可视)

显示提示信息

read -p “Enter input:” var

在特定的时限内读输入

read -t timeout var
example
read -t 2 var (2s)

用界定符结束输入行

read -d “:” var
hello:
var被设置为hello

字段分隔符和迭代器

内部字段分隔符(internal field separator IFS)
IFS是存储定界符的环境变量。她是当前shell环境变量的默认定界字符串

 data="name,sex,rollnoo,location"
 oldIFS=$IFS
 IFS=","
 for item in $data
 do
 echo Ttem: $item
 done
 IFS=$oldIFS

输出
Ttem: name
Ttem: sex
Ttem: rollnoo
Ttem: location

IFS默认值为空白字符(换行符,制表符或者空格)

root@lilongiu-VirtualBox:~/study/shell# ./20210910.sh 
./20210910.sh: 第 118 行: [: 缺少 `]'
./20210910.sh: 第 119 行: [: 缺少 `]'

书写[] 的前后都需要有空格 不然会报上面的错误

 line="root:x:0:0:root:/root:/bin/bash"
 oldIFS=$IFS
 IFS=":"
 count=0
 for item in $line;
 do
 [ $count -eq 0 ] && user=$item;  #注意[]前后要留空格
 [ $count -eq 6 ] && shell=$item;
 let count++
 done;
 IFS=$oldIFS
 echo $user\'s shell is $shell;

输出为root’s shell is /bin/shell

循环

for var In list;
do 
commands
done
list can be a string or a sequence 

fo( (i=0;i<10;i++) )
{
	commands
}
 

while
while conditong
do
commands;
done
#用true作为循环条件能够产生无限循环

#until循环
x=0;
until [ $x -eq 9 ]; # [ $x -eq 9 ] is the condition

do 
let x++;
done

比较测试

if
if condition;
then
commands;
fi

else if && else
if condition;
then
commands;
elif condition;
then
       commands
else
		commands
fi

逻辑运算符比较

[ conditiong ] && action ; #如果condition为真,则执行action
[ condition ] || action; #如果condition为假,则执行action

算术比较
[ $var -eq 0 ]

对变量值进行算术条件判断
[ KaTeX parse error: Expected 'EOF', got '#' at position 14: var -eq 0 ] #?当var等于0时,返回真
[ &var -ne 0 ] #当$var不等于0时,返回真

其他重要操作符

gt; 大于
-lt :小于
-ge :大于或小于
-le:小于或等于

可以结合使用
[ $var -ne 0 -a $ var2 -gt 2 ] #使用逻辑与 -a
[ $var -ne 0 -o var2 -gt 2 ] # 逻辑或 -o

文件系统的相关测试

[ -d $var ] :如果给定的变量包含的是目录,则返回真
[ -e $var ]:如果给定的变量包含的文件存在,则返回真
[ -c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真
[ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真
[ -w $var ]:如果给定的变量包含的文件可写,则返回真
[ -r #var ]:如果给定的变量包含的文件可读,则返回真
[ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真

example:

fpath="/etc/passwd"
if [ -e $fpath ];
then
echo File exists;
else
echo File not exist;
fi

字符串比较

使用字符串比较,最好使用双中括号
[ [ $str1 != $str2 ] ]

[ [ $str1 = $str2 ] ]
[ [ s t r 1 = = str1 == str1==str2 ] ]

[ [ $str1 > $str2 ] ]
[ [ $str1 < $str2 ] ]

[ [ -z $str2 ] ] 如果str1包含的是空字符串,则返回真
[ [ -n $str2 ] ] 如果str1包含的是非空字符串,则返回真

example:

if [ [ -n $str1 ] ] && [ [ -z $str2 ] ]
then
commands;
fi 
str1="hello"
str2=""
if [ [ -n $str1 ] ] && [ [ -z $str2 ] ]
then
echo str1 is non-empty and str2 is empty string
fi 

输出str1 is non-empty and str2 is empty string
if [ $var -eq 0 ]; then echo ''True"; fi #can be write as
if test $var -eq 0; then echo “True”; fi

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:13:10  更:2021-09-11 19:14:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:29:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码