shell脚本学习3(笔记

这篇博客介绍了Shell脚本中的命令替换、参数替换、单引号和反引号的区别,以及输入输出操作,如read命令和printf格式化输出。通过实例展示了如何在脚本中读取用户输入、显示命令执行结果以及设置自定义命令提示符。还提到了逻辑操作符和条件表达式的使用,以及如何在脚本中判断文件是否存在、比较数字大小、查找文件中的关键字等。
摘要由CSDN通过智能技术生成

6.9/10. shell总体复习笔记
面向面试,自动化运维
IT需要的四种底层技术
网络(IT、信息化 的基础,数据传输底层的建筑):通信基础三要素 IP协议与端口
系统
数据库
编程(APP,web) 上传系统到网络进行交互沉淀到数据库中
6.9晚
内容:shell脚本
shell 人工到自动化运维
笔记:
shell
shell 脚本
#!/bin/bash 声明用那个shell来执行程序
#注释 或者是作者版本号东西
var1=“hello worid!”
echo $var1
pwd
df -h
清楚变量内容 unset
查看变量的值 set

环境变量与全局变量
同本月六号记内容

环境变量
HOME 当前用户的家目录
PATH 命令查找路径
LOGNAME 登录名

LINUX下 ps1/ps2/ps3/ps4 yi’yi
note:此处为PS 1
PSI 命令提示符
\W 当前工作目录
\h 主机名
\u 用户名
\d 日期
\t 时间
\a 响铃提示

补充:ps1/ps1/ps2/ps3/ps4为环境变量,通过设置环境变量来自定义用户命令行的字符提示。要长期永久性的修改提示符,参考day2的全局变量的设置方法。
PS1是主提示符变量,也是默认提示符变量。
PS1是主提示变量符,即为默认变量符。
默认值 [localhost@root]#echo KaTeX parse error: Undefined control sequence: \u@ at position 8: ps1 [\̲u̲@̲\h\w]
显示用户名、主目录、主机名
案例:
[root@rhel8 ~]# PS1="\w\d\t>"
~>ll
total 8
-rw-------. 1 root root 1400 May 29 19:59 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 29 20:04 Desktop
drwxr-xr-x. 2 root root 6 May 29 20:04 Documents
drwxr-xr-x. 2 root root 6 May 29 20:04 Downloads
-rw-r–r--. 1 root root 1555 May 29 20:03 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 May 29 20:04 Music
drwxr-xr-x. 2 root root 6 May 29 20:04 Pictures
drwxr-xr-x. 2 root root 6 May 29 20:04 Public
drwxr-xr-x. 2 root root 6 May 29 20:04 Templates
drwxr-xr-x. 2 root root 6 May 29 20:04 Videos

主要的参数有:
/T 显示时间为12小时格式
/A 显示时间为24小时格式:HH:MM
/u 当前用户的账号名称
/v BASH的版本信息
/w 完整的工作目录名称。家目录会以 ~代替
/W 利用basename取得工作目录名称,所以只会列出最后一个目录
/# 下达的第几个命令
/$ 提示字符,如果是root时,提示符为:# ,普通用户则为:$
/[ 字符”[“
/] 字符”]”
/! 命令行动态统计历史命令次数

PS2 一般用于命令行里较长的换行提示信息

一个非常长的命令可以通过在末尾加 \ 使其分行显示
PS2多行命令的默认提示符,默认值是 >
echo
>
export PS2=">+"
echo
>+

ps3
shell脚本中使用select时的提示符
[root@node1 ~]# cat ps3.sh
select i in mon tue wed exit
do
case $i in
mon) echo “Monday”;;
tue) echo “Tuesday”;;
wed) echo “Wednesday”;;
exit) exit;;
esac
done
[root@node1 ~]# bash ps3.sh

  1. mon
  2. tue
  3. wed
  4. exit
    #? 1
    Monday
    #? 2
    Tuesday
    #? 3
    Wednesday
    #?

改写
[root@node1 ~]# clear
[root@node1 ~]# select i in mon tue wed exit

do
case $i in
mon) echo “Monday”;;
tue) echo “Tuesday”;;
wed) echo “Wednesday”;;
exit) exit;;
esac
done

  1. mon
  2. tue
  3. wed
  4. exit
    Select a day (1-4):
    提示符变成了 select a day(1-4):

PS4
PS4这个参数的值与PS1一样展开,并且在执行跟踪期间每个命令bash显示之前打印该值。如有必要,PS4的第一个字符被多次复制,以指示多个间接级别。默认值为“+”。

位置变量
预定义变量(六号已有

命令替换
var=KaTeX parse error: Expected 'EOF', got '#' at position 29: …ar=`command` #̲###############… 参数替换 和 ‘ 属于例外
单引号将所有字符特殊含义剥夺
反引号=$()

[root@rhel8 ~]# echo “User $(whoami) is on $(hostname)”
User root is on rhel8
[root@rhel8 ~]# echo "Today is "‘date’
Today is date
[root@rhel8 ~]# echo "Today is "date
Today is Sun Jun 16 20:10:05 CST 2019

输入输出
read

[root@rhel8 ~]# read -s -n1 -p “Yes or Not?” answer
Yes or Not?[root@rhel8 ~]#
[root@rhel8 ~]# echo $answer
Y
[root@rhel8 ~]# read -s -n1 -p “Yes or Not?” answer
Yes or Not?[root@rhel8 ~]#
[root@rhel8 ~]# echo $answer
N

[root@rhel8 ~]# read var1 var2
1 3
[root@rhel8 ~]# echo $var1
1
[root@rhel8 ~]# echo $var2
3
echo
-n 不在最后自动换行
-e 启用反斜线控制字符的转换
-E 不处理转义字符,默认选项

		转义符
		\a	从系统喇叭发送声音
		\b	向左删除
		\c	取消行末的换行符号
		\E	ESCAPE键
		\f	换页字符
		\n	换行字符
		\r	回车键
		\t	制表符
		\v	垂直制表符
		\\	反斜线本身

[root@rhel8 ~]# echo -e “a\tb\tc\nd\te\tf”
a b c
d e f

[root@rhel8 shell]# echo -e “\e[1;31mThis is red text\e[0m”
This is red text

\e[1;31m 将颜色设置为红色
\e[0m 将颜色重新置回

颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

[root@rhel8 shell]# echo -e “\033[37;31;5mMySQL Server Stop…\033[39;49;0m”
MySQL Server Stop…

5mMySQL数字5还有其他参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
printf

[root@rhel8 ~]# printf “hello world”
hello world[root@rhel8 ~]# printf “hello world\n”
hello world
[root@rhel8 ~]#

[root@rhel8 shell]# bash 1printf.sh
NO Name Mark
01 Tom 90.35
02 Jack 89.23
03 Jeff 98.43
[root@rhel8 shell]# cat 1printf.sh
#!/bin/bash

printf “%-5s %-10s %-4s\n” NO Name Mark
printf “%-5s %-10s %-4.2f\n” 01 Tom 90.3456
printf “%-5s %-10s %-4.2f\n” 02 Jack 89.2345
printf “%-5s %-10s %-4.2f\n” 03 Jeff 98.4323

%-5s 格式为左对齐,宽度为5的字符串,- 表示左对齐,不使用则表示右对齐
%-4.2f 格式为左对齐,宽度为4,保留2位小数

%b 相对应的参数被视为含有要被处理的转义序列之字符串
%c ASCII字符。显示相对应参数的第一个字符
%d, %i 十进制整数
%e, %E, %f 浮点格式
%g %e或%f转换,看哪一个较短,则删除结尾的零
%G %E或%f转换,看哪一个较短,则删除结尾的零
%o 不带正负号的八进制值
%s 字符串
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10至15
%X 不带正负号的十六进制值,使用A至F表示10至15
%% 字面意义的%

字符串拼接

[root@rhel8 shell]# myname=“haha”
[root@rhel8 shell]# greeting="hello,“KaTeX parse error: Expected 'EOF', got '#' at position 28: …ot@rhel8 shell]#̲ greeting_1="he…myname”
[root@rhel8 shell]# echo $greeting $greeting_1
hello,haha hello,haha

[root@rhel8 shell]# greeting_2='hello,‘KaTeX parse error: Expected 'EOF', got '#' at position 28: …ot@rhel8 shell]#̲ greeting_3='he…myname’
[root@rhel8 shell]# echo g r e e t i n g 2 greeting_2 greeting2greeting_3
hello,hahahello,$myname

获取字符串长度
[root@rhel8 shell]# str=“abcd”
[root@rhel8 shell]# echo ${#str}
4

提取字符串
[root@rhel8 shell]# str=“abcdefghigklmn”
[root@rhel8 shell]# echo ${str:1:4}
bcde

查找字符串位置
[root@rhel8 shell]# str=“hello world”
[root@rhel8 shell]# echo expr index "$str" ed
2
[root@rhel8 shell]# echo expr index "$str" d
11
逻辑操作符
若操作对象是逻辑表达式,则用逻辑操作符


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值