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