侧边栏壁纸
博主头像
程序员の小站博主等级

行动起来,活在当下

  • 累计撰写 51 篇文章
  • 累计创建 35 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Shell脚本的简单使用

Administrator
2025-04-11 / 0 评论 / 0 点赞 / 2 阅读 / 5150 字
温馨提示:
本文最后更新于 2025-04-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#!/bin/bash

echo "hello world"

# 系统常用的变量有 HOME PWD SHELL USER等。获取变量值的语法 $变量名

echo $HOME
echo $PWD

echo "使用set命令查看系统中有哪些变量"
#set
# 自定义变量的使用和调用
# 自定义变量 变量名=变量值 需要注意的是=号前后不能有空格
# 撤销变量 unset 变量名
# 声明静态变量 readonly变量,不能unset

A=5
echo $A
readonly B=10
echo $B

# 注意事项:
# 	1. 在bash中,变量默认类型都是字符串无法直接进行数值运算
# 	2. 变量的值如果有空格需要使用双引号或者单引号括起来。双引号中的变量会进行解析。单引号的不会进行解析
# 	3. 可把变量提升为全局环境变量供其他Shell程序使用。 需要使用 export 变量名 实现
# 	

echo "=================================下边开始演示特殊的变量======================="

# 特殊变量的说明:
# 1. $n: n为数字 $0代表改脚本的名称 $1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含。如 ${10}
# 2. $#: 表示输入参数的个数
# 3. $*: 这个变量代表命令行中说有的参数,把所有的参数看成一个整体
# 4. $@: 这个变量代表命令行中所有的参数,会把参数进行分别的对待
# 5. $?: 返回上一次命令执行的状态,成功还是失败,只要返回的值不是0就是失败的情况
echo $1
echo $2
echo $#

# 运算符: $((运算式)) 或者 $[运算式]
# 
echo $[1+2+3]

# 条件判断:
# 基本语法: test condition 或者是 [ condition ] 这种写法 condition 的前后都要有空格。 条件非空即为true
# 常用的判断条件 -eq -ne -lt -le -gt -ge
# 常用的文件权限的判断 -r -w -x 
# 按照文件类型进行判断 -e 文件存在 -f 文件存在并且是一个常规的文件 -d 文件存在并且是一个文件夹
# 多条件判断: &&表示前一条命令执行成功后才执行下一条命令  ||表示上一条命令执行失败后才会执行下一条命令

echo "=================================条件判断演示脚本======================="
[ 2 -ge 3 ] 
echo $?

[ 2 -ge 1 ]
echo $?

[ -w test.sh ]
echo $?

# 流程控制
# 单分支if判断 if [ 条件判断式 ];then
# 				程序
# 			 fi
# 			 
# 或者使用下边的方式编写
# 			 if [ 条件判断式 ]
# 			 then
# 			 	程序
# 			 fi
# 需要注意的事项: [ 条件判断式 ] 中括号和条件判断之间必须有空格, if 后要有空格


# 多分支的控制
# if [ 条件判断式 ] 
# then
# 	程序
# elif [ 条件判断式 ] 
# then 
# 	程序
# else
# 	程序
# fi
# 
# 需要注意的事项: [ 条件判断式 ] 中括号和条件判断之间必须有空格, if 后要有空格

if [ $1 -eq 1 ]
then
	echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
	echo "cls zhen mei"
fi


# case 语句
# case $变量名 in
# "值 1")
# 	如果变量的值等于值1,则执行程序
# ;;
# "值 2")
# 	如果变量的值等于值2,则执行程序
# ;; 
# *)
# 	如果变量的值都不是以上的值,则执行此程序
# ;;
# esac

case $1 in
	"1" )
		echo "哎呀呀呀呀"
	;;
	"2" )
		echo "888888888888888哎呀呀呀呀"
	;;
	*)
		echo "默认的值呀"
	;;
esac


# 循环语句
# for (( 初始值; 循环控制条件; 变量变化 )); do
#	#statements
# done

sum=0
for (( i = 0; i < 10; i++ )); do
	#statements
	sum=$[$sum+$i]
done

echo $sum

#
# for i in words; do
# 	程序
# done
for i in 1 2 3; do
	#statements
	echo $i
done

# 上述中的 $* 和 $@ 特殊符号的使用

for i in $*; do
	echo "外部传入了什么呢=====$i"
done


for i in $@; do
	echo "=====$i"
done

# while 的循环
# while [ 条件判断式 ]
# do
# 	程序
# done
# 
sumWhile=0
iWhile=1
while [[ $iWhile -le 100 ]]; do
	sumWhile=$[$sumWhile+$iWhile]
	iWhile=$[$iWhile+1]
done
echo $sumWhile


# 读取控制台的输入
# read [选项] [参数]
# 选项:
# 	-p 指定读取值时的提示符
# 	-t 指定读取值时等待的时间,如果不添加则表示一直等待

read -p "请输入你的名称:" name
echo "你好:$name"

# 系统函数
# basename:会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
# dirname: 获取文件的绝对路径
# 
# 

# 自定义函数
# [ function] funname[ ()]
# {
# 	Action;
# 	[return int;]
# }
# 必须在调用函数地方之前声明函数,shell脚本时逐行运行,不会像其他语言一样先编译
# 函数返回值只能通过$?系统变量获得,可以显示加:return返回,如果不加将以最后一跳命令运行结果作为返回值。renturn后跟数值n(0-255)
# 

function sum()
{
	s=0
	s=$[$1+$2]
	echo "$s"
}

read -p "请输出第一个参数:" n1
read -p "请输出第二个参数:" n2
sum $n1 $n2

# cut
# 具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
# 基本用法:
# 	cut [选项参数] filename
# 选项参数:
# 	-f 列号 提取第几列
# 	-d 分割符 按照指定的分割符分割线 默认的是制表符 "\t"
# 	-c 按字符进行切割,后加n 表示取第几列 比如-c 1
# 
# 	获取IPV4的地址	
ifconfig eth0 | grep "inet " | cut -d " " -f 10
# awk
# 一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
# 基本用法:
# 	awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
# 	pattern: 表示awk在数据中查找的内容,就是匹配模式
# 	action:在找到匹配内容时所执行的一系列命令
# 选项参数:
# 	-F 指定输入文件的分割符
# 	-v 赋值一个用户定义的变量
# 	

# 搜索passwd文件以root关键字开头的所有行,并胜出改行的第7列
awk -F : '/^root/{print $7}' passwd

# 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列, 中间以“,”号分割。
awk -F : '/^root/{print $1","$7}' passwd


0

评论区