#!/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
评论区