bash脚本记录,基本够用了
服务器要到期了,记录的bash脚本先搬过来存一下,日后再好好整理。
#! /bin/bash
#chmod +x test.sh可以加上可执行权限
#三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)
# ./xxx.sh :先按照 文件中#!指定的解析器解析
# 如果#!指定指定的解析器不存在 才会使用系统默认的解析器
# bash xxx.sh:指明先用bash解析器解析
# 如果bash不存在 才会使用默认解析器
# . xxx.sh 直接使用默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的
## 若Windows编写的脚本不能运行
# 将windows文件 转换成 unix文件
# 方法一:dos2unix 如果没有该插件 需要安装
# sudo apt-get install dos2unix
# dos2unix shell脚本
# 转换成功就可以执行运行
# 方法二:
# 需要用vi打开脚本,在最后一行模式下执行
# :set ff=unix
##变量
#声明变量并赋值,unset清除变量值
# num=10
# echo $num
# unset num
# echo $num
#数组
#使用圆括号,元素用空格分开
# arr=("v1" "v2" "v3" "v4")
#或者下标赋值也可以
# arr[0]="a"
# arr[1]="b"
# #下表读取元素
# arr=("v1" "v2" "v3" "v4")
# echo "${arr[0]}"
# echo "${arr[2]}"
# #输出数组所有元素
# arr=("v1" "v2" "v3" "v4")
# echo "数组的元素为: ${arr[*]}"
# echo "数组的元素为: ${arr[@]}"
#输出数组的长度
# arr=("v1" "v2" "v3" "v4")
# echo "数组元素个数为: ${#arr[*]}"
# echo "数组元素个数为: ${#arr[@]}"
# #遍历数组元素
# arr=("v1" "v2" "v3" "v4")
# for i in ${arr[*]}
# do
# echo $i
# done
#输入
# read -p "输入值:" num
# echo $num
#只读变量
# readonly num=-1
# num=1 # 报错,不让修改
#变量导出,可以被其他shell脚本识别并无需导入直接通过$符号使用(需要在终端执行:source 脚本文件名)
# export MY_ENV_P="NNN" #在终端执行source test.sh,再执行env,输出内容就有MY_ENV_P这变量,其他shell文件可直接通过$MY_ENV_P来使用
#数字和字符串是一样的???可以测试一下输入
# echo "参数的个数=$#"
# echo "参数的内容=$*"
# echo "第1个参数=$1"
# echo "第2个参数=$2"
# echo "第3个参数=$3"
# readonly data=250
# echo "data=250的结果:$?"
# echo "进程名:$0"
# echo "进程号:$$"
##脚本变量特殊用法,双引号、单引号、转义、()、{}
# echo "今天是:`date`"
# echo -e "##\n##"
# data=10
# # ()开启一个子shell,里面的读写不影响外部(当前)的shell变量
# (
# data=100
# echo "()里面的data=$data"
# )
# echo $data
# # {}开启一个子shell,里面的读写会影响外部(当前)的shell变量
# {
# data=1000
# echo "{}里面的data=$data"
# }
# echo $data
##变量的扩展
#判断变量是否存在,若num存在则显示num的值,否则显示999(-后面设定的默认值)
# num=-1
# echo ${num:-999}
#判断变量是否存在,若num存在则显示num的值,否则显示999(-后面设定的默认值),并把num赋值为999
# echo ${num:=999}
# echo $num
#字符串的操作
# str="hehe:haha:xixi:lala"
# echo "str的长度:${#str}"
#从下表3截取
# echo ${str:3}
#从下表3截取6个字节,是字节吗???
# echo ${str:3:6}
#${str/old/new}用new替换str中出现的第一个old
# echo ${str/:/#}
#${str//old/new}用new替换str中出现的全部old
# echo ${str//:/#}
##条件测试
# 测试两种写法,一种是 `test 表达式`,另一种是`[ 表达式 ] `,中括号两边要有空格,
# 测文件 参数:-e存在 -d是目录 -f是文件 -r可读 -w可写 -x可执行 -s文件非空
#.profile是否存在
# fileName=".profile"
# [ -e $fileName ]
# echo $?
# 测字符串 参数 =两边相等 -z是空串 !=两边不等 -n非空串
# 测试yn是不是空串
# test -z $yn
# echo $?
# 这里可以研究下""的情况,可以区分(yn="")和(yn=)这两种情况,好像初始赋值为""就等同于没这个变量一样
#意外发现,不用双引号将$yn括起的话,输出是错的
# yn=""
# [ -z "$yn" ]
# echo $? #不是空串,输出1
# [ -n "$yn" ]
# echo $? #不是空串,输出1
# test $yn = "1"
# echo $? #输出0
#数字比较
# 测数字 参数:-eq两边相等 -ne两边不等 -gt左>右 -ge右>=左 -le左<=右 -lt左<右
# a=1
# b=2
# test $a -lt $b
# echo $?
#多条件测试
# test -e ".profile" && test -d "go" && echo "true"
## 控制语句if case for while until break
#if
# read -p "输入1或2:" num
# if [ $num = "1" ]; then
# echo "1"
# elif [ $num = 2 ]; then
# echo "2"
# else
# echo "没有"
# fi
#case
# )左边是变量的值,字符串也不需要加双引号
# read -p "输入choice:" choice
# case $choice in
# yes | y* | Y*)
# echo "YES!"
# ;;
# no | n* | N*)
# echo "NO!"
# ;;# break
# *)
# echo "default"
# ;;
# esac
#for
#declare用于声明一个变量, -i可以表示声明一个int类型的变量
# declare -i sum=0
# declare -i i=0
# for ((i=0; i < 5; i++))
# do
# sum=$sum+$i
# done
# echo $sum
#或者
# declare -i sum=0
# declare -i i=0
# for i in 1 2 3
# do
# sum=sum+i
# done
# echo $sum
#while
# declare -i sum=0
# declare -i i=0
# while [ "$i" != "5" ]
# do
# i=i+1
# sum+=i
# done
# echo $sum
#until,与while相反,当条件成立时结束循环
# declare -i sum=0
# declare -i i=0
# until [ "$i" = "5" ]
# do
# sum+=i
# i+=1
# done
# echo $sum
## 函数
# declare -i a=0
# declare -i b=0
# function getSum() {
# return $(($1+$2))
# }
# read -p "输入a:" a
# read -p "输入b:" b
# #开始调用
# getSum $a $b
# echo "和为:$?"
###案例,引用
#导入test2
# source test2.sh
# read -p "输入a:" a
# read -p "输入b:" b
# #开始调用
# getSum $a $b
# echo "和为:$?"
## 输出重定向
#命令结果覆盖写入到文件,格式为:命令 > 文件路径
# echo "hello" > a.txt
#命令结果追加写入到文件,格式为:命令 >> 文件路径
# echo "hello" >> a.txt
# /dev/null 文件
# 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
# echo "hello" > /dev/null #屏幕上什么也不会输出
## printf格式化输出
# %s 字符串 %d 整型,%c 字符,%f 小数
# -表示左对齐,否则默认右对齐,数字代表字符串占用宽度,不足则填充空格,超出范围仍会全部显示
# printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
# printf "%-10s %-8s %-4.2f\n" 郭靖xxxxxxxxxxxxxx 男 66.1234
# printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
# printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
本文作者:为何匆匆
本文链接:https://www.cnblogs.com/nyfblog/p/16480798.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步