学习linux,shell是绕不过去的槛。以此记录学习,共勉。
常用系统变量
$HOME、$PWD、$SHELL、$USER等
(1)查看系统变量的值
(2)显示当前shell中所有变量 set
1.基本语法:
(1)声明变量:变量名=变量值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly 变量(不能被unset)
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格。
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或者单引号括起来。
eg:
(1)定义变量A
(2)定义只读变量B
只读变量只能输出引用,无法进行更改操作,也无法unset
(3)默认变量无法进行数值运算
(4)变量值定义时有空格需要单引号和双引号
(5)可将变量提升为全局环境变量,能让其他shell程序使用
export 变量名
将D更改为全局变量
1.基本语法
$n (n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10})
eg:新建sh文件,依次定义参数
1.基本语法
$# (获取所有输入参数个数,常用于循环)
eg:获取输入参数的个数
可以看到参数个数也打印出来了。
1.基本语法
$*(这个变量代表命令行中的所有参数,$*把所有参数都看成一个整体)
$@(这个变量也代表命令行中的所有参数,但将每个参数区分)
主要区别:
当它们被双引号(" “)包含时,”$*" 会将所有的参数作为一个整体,以“$1 $2 … n” 的 形 式 输 出 所 有 参 数 ;
"$@" 会将各个参数分开,以“$1” “$2"…"n” 的形式输出所有参数。
1.基本语法
$?(检查最后一次执行命令的返回状态。如果变量的值为0,证明上一个明明正确执行;如果变量非0,则证明上一个命令执行不正确了。)
1.基本语法
(1)“$((运算式))”或“$[运算式]”
(2)expr +,-,\*,/,% 加减乘除取余
注:expr运算符间要有空格
2.eg:
(1)普通运算
(2)混合运算
需要用 ` ` 来嵌套运算
(3)用$计算
直接可以使用变量传值
1.基本语法
[ condition ] (注意 condition 前后要有空格)
注意:条件非空即为true,[ root ] 返回true, [ ] 返回false。
2.常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在 (existence) -d 文件存在并且是一个目录
3.eg
(1)数值判断
(2)文件权限判断
(3)文件类型判断
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
1.基本语法
if [ 条件判断表达式 ];then
程序
fi
或者
if [ 条件判断表达式 ]
then
程序
fi
注意:
(1)[ 条件判断表达式 ] 前后必须有空格
(2)if 后要有空格
2.eg
题:输入一个数字,如果是1,则输出“这是1”;如果是2,则输出“这是2”;如果是其它,则不输出。
1.基本语法
case $变量名 in #case行尾必须为单词"in",每一个匹配模式必须以右括号“)”结束
"值1")
如果变量的值等于值1,则执行程序1
;; #双分号表示命令序列结束,相当于break
"值2")
如果变量的值等于值2,则执行程序2
;;
...
*) #最后的“*)”表示默认模式,相当于default
如果变量的值都不是以上的值,则执行此程序
;;
esac #case的结束语
2.eg
题:输入一个数字,如果是1,则输出“这是1”;如果是2,则输出“这是2”;如果是其它,则输出“其它”。
1.基本语法1
for(( 初始值;循环控制条件;变量变化 ))
do
程序
done
eg:从1加到100
2.基本语法2
for 变量 in 值1 值2 值3...
do
程序
done
eg:打印所有输入参数
1.基本语法
while [ 条件表达式 ]
do
程序
done
从1加到100