Linux 提供的 Shell 解释器:

bash 和 sh 的关系:

CentOS 默认的解析器:

脚本格式,以 #!/bin/bash 开头,指定解析器


第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限
在 /home/ 目录下创建一个 text.txt 文件,在文件增加 "I love the world!"



使用 set 查看当前 Shell 中所有变量
定义变量 变量名=值
撤销变量 unset 变量名
声明静态变量 readonly 变量名=值 ,其不能 unset
变量名定义规范:

可使用 export 变量名 把变量提升为全局环境变量,可供其他 Shell 程序使用
hello.sh 文件:
#!/bin/bash
echo "Hello World!"
echo $A

$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10} )
vim parameter.sh
#!/bin/bash
echo "$0 $1 $2 $3 $4"

$# 获取所有输入参数个数,常用于循环
#!/bin/bash
echo "$0 $1 $2 $3 $4"
ech $#

$* 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待
#!/bin/bash
echo "$0 $1 $2 $3 $4"
echo $#
echo $*
echo $@

$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了

$((运算式)) 或 $[运算式]expr + , - , \*, /, % 加,减,乘,除,取余注意:expr运算符间要有空格

[ condition ] 条件非空即为 true,[ jkfx ] 返回true,[] 返回false
注意:condition 前后要有空格
= 字符串比较
-lt 小于(less than)
-le 小于等于(less equal)
-eq等于(equal)
-gt 大于(greater than)
-ge 大于等于(greater equal)
-ne 不等于(Not equal)
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)
-d 文件存在并是一个目录(directory)

if [ 条件判断式 ];then
语句
fi
if [ 条件判断式 ]
then
语句
fi
注意事项:
[ 条件判断式 ] 中括号和条件判断式之间必须有空格if 后要有空格#!/bin/bash
if [ $1 -eq 1 ];then
echo "Geek Fx is handsome!"
elif [ $1 -eq 2 ]
then
echo "Jkfx is gorgeous!"
fi

case word in
pattern1 )
语句1
;;
pattern2 )
语句2
;;
* )
default语句
;;
esac
注意事项:
case 行尾必须为单词 in 每一个模式匹配必须以右括号 ) 结束。;; 表示命令序列结束,相当于 break。*) 表示默认模式,相当于 default。#!/bin/bash
case $1 in
1 )
echo "Male"
;;
2 )
echo "Fmale"
;;
* )
echo "Shemale"
;;
esac

for (( i = 0; i < 10; i++ )); do
#statements
done
#或者
for (( i = 0; i < 10; i++ ))
do
#statements
done
#!/bin/bash
s=0
for (( i = 0; i <= 100; i++)); do
s=$[$s+$i]
done
echo $s

for i in words; do
#statements
done
#或
for i in words
do
#statement
done
比较 $* 和 $@ 区别:
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号 "" 包含时,都以 $1 $2 … $n 的形式输出所有参数。"" 包含时,$* 会将所有的参数作为一个整体,以 "$1 $2 … $n" 的形式输出所有参数;$@ 会将各个参数分开,以 "$1" "$2" … "$n" 的形式输出所有参数。#!/bin/bash
for i in $@; do
echo "I love $i"
done
for j in $*
do
echo "I like $j"
done

#!/bin/bash
for i in "$@"; do
echo "I love $i"
done
for j in "$*"
do
echo "I like $j"
done

while [[ condition ]]; do
#statements
done
#或
while [[ condition ]]
do
#statements
done
#!/bin/bash
i=1
s=0
while [[ $i -le 100 ]]; do
s=$[$s + $i]
i=$[$i + 1]
done
echo $s

使用 read [-选项] 参数 从控制台读取输入内容
选项:
-p 指定读取值时的提示符-t 指定读取值时等待的时间(秒)#!/bin/bash
read -t 8 -p "Enter your name in 8 seconds: " NAME
echo $NAME

basename 的基本用法
basename [string/pathname] [suffix] 此命令会删掉所有的前缀包括最后一个 / 字符,然后将字符串显示出来
[suffix] 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉

dirname 的基本用法
dirname 文件路径 从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

function funname[()]
{
#statement;
[return int;]
}
注意事项:
$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)#!/bin/bash
function sum()
{
s=0
s=$[$1 + $2]
echo $s
}
read -p "Input parameter1: " P1
read -p "Input parameter2: " P2
sum $P1 $P2

cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut [选项] filename
选项说明:
-f 列号,提取第几列-d 分隔符,按照指定分隔符分割列,默认是 \t


sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [选项] ‘command‘ filename
选项说明:
-e 直接在指令列模式上进行 sed 的动作编辑command 功能描述:
a 新增,a 的后面可以接字符串,在下一行出现d 删除s 查找并替换
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
awk [选项] ‘pattern1 {action1} pattern2 {action2} ...‘ filename
选项参数说明:
pattern 表示 AWK 在数据中查找的内容,就是匹配模式(正则表达式)action 在找到匹配的内容时所执行的一系列命令-F 指定输入文件分隔符-v 赋值一个用户定义变量


FILENAME 文件名NR 已读记录数(行号)NF 浏览记录的域的个数(列个数)


sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出
sort [选项] [参数]
选项说明:
-n 按照数值大小进行排序-r 按照相反顺序排序-t 设置排序时所用的分隔符-k 指定需要排序的列
原文:https://www.cnblogs.com/geekfx/p/13762581.html