shell基础命令记录.
为了方便自己随时查看练习做的记录
技巧记录:ctrl + r 可以搜索之前输入过的命令
1. 变量赋值
a=1
b="this is a string"
echo $a
echo $b
2. 变量引用
使用$符号,直接引用单个变量
echo $a
输出变量a的值
在字符串中插入变量的值(必须双引号)
echo "number is $a"
输出"number is 1",引用变量a的值
注意变量引用时可能出现的歧义
如想输出变量a的值加"_1",即"1_1"
echo "this is $a_1"
输出"this is ",此时shell会把$a_1中的a_1当成是变量名,没有定义的变量输出空
在字符串中插入$a(非引用变量a的值)(单引号)
echo 'number is $a'
输出"number is $a",使用单引号会输出字符本身而不会把$a的值打印出来
3.预定义变量
$PWD 当前的home目录
$USER 当前用户名
$HOME 当前用户的home目录
$PATH 环境变量
4.反引号的作用
(``)反引号包括的内容会被当成命令执行
a=`ls`
echo $a 输出ls的内容(列出文件夹内文件)
5.ls的用法
ls -l
显示文件的详细信息
ls -al
列出包括隐藏文件的所有文件
6.查看程序安装路径
which python
输出python的安装路径
7.数组
定义数组
array=(1 2 3 4)
数组的引用
echo ${array[@]} #返回数组全部元素,1234 --"${array[@]}"带双引号引用时还是返回一个数组
echo ${array[*]} #返回数组全部元素,1234 --"${array[*]}"带双引号引用时会把数组转为字符串后返回如1 2 3 4
echo ${array[1]} #返回数组第1个元素,2
数组长度
echo ${#array[@]}
输出5,"#"可以返回数组的长度
命令赋给数组
arr=(`ls`)
echo ${arr[@]}
因为括号()的存在,这种形式下,arr为一个数组,包含元素为ls命令的返回值
8.特殊符号
1.反斜杠():转义 echo -e "a\nb"
-e表示开启转义模式,如输入时\n换行,\b表示删除前一个字符,\a表示发出一个警告音
2.$(()) :对变量进行操作
3.(()):整数扩展,里面的变量当作整数处理,a=1;b=3;echo $((a+b)) 输出4
4.({1..10}):等价于 seq1 10。返回1到10.
5.反引号(` `):表示命令的输出
6.$(ls):表示执行ls之后的结果
7.$? :返回前一句语句的逻辑判断结果,True or False
9.变量类型
1.字符串
2.数值
3.布尔值 :0为True,非0为False
10.数值运算
1.自增等 a++ a--
2.加、减、乘、除、取余
a=11
b=22
echo "a=$a , b=$b"
echo "a*b: "`expr $a \* $b`
echo "a+b: "`expr $a + $b`
echo "a-b: "`expr $a - $b`
echo "b/a: "`expr $b / $a`
echo "b%a: "`expr $b % $a
11.字符串操作
a="this is a string"
echo ${a:6} # 输出is a string
echo ${a:6:7} # 输出is a st"
echo ${a#this} #输出"is a string"
echo "${a#this}" #输出" is a string" (不去掉空格)
echo "${a#*s}" #输出" is a string",\*为通配符
echo "${a##*s}" # 输出"tring" ,从开头匹配最后一个s,并切片输出
echo "${a%string}" #输出"this is a ",去尾,
echo "${a%%*s}" # 输出"thi" ,从结尾开始匹配最后一个s,并切片输出
echo ${a/a/two} #输出 "this is two string",替换字符串
echo ${a//i/q} #输出"thqs qs a strqng",所有匹配到的字符串均会被替换
12.判断的类型
算术判断
1.[ 2 -eq 2 ] 相等
2.[ 2 -ne 3 ] 不等
3.[ 3 -gt 1 ] 大于
4.[ 3 -ge 3 ] 大于等于
5.[ 3 -lt 4 ] 小于
6.[ 3 -le 3 ] 小于等于
7.((3>20))
字符串比较
1.[ str1 = str2 ]
2.[ str2 != str1 ]
3.[ -n str1 ] 字符串不为空,返回True
4.[ -z str ] 字符串为空,返回True
5.[[ "xxx" == x* ]] 通配符*,0个以上任意字符
6.[[ xxx == x??]] 通配符??,1个任意字符
逻辑判断
1.[ 2 -ge 1 -a 3 -ge 4 ];echo $? 与运算-a,
2.[ 2 -ge 1 && 3 -ge 4 ];echo $? 与运算&&
3.[ 2 -ge 1 -o 3 -ge 4 ];echo $? 或运算-o
4.[ 2 -ge 1 || 3 -ge 4 ];echo $? 或运算||
5.[ ! 2 -ge 1 ];echo $? 非!
内置判断
1.[ -e file ]
文件存在返回真
2.[ -d file ]
文件为子目录,返回真
3.[ -f file ]
文件为普通文件,返回真
4.[ -r file ]
文件可读,返回真
5.[ -s flie ]
文件长度不为0,返回真
6.[ -w file ]
文件可写,返回真
7.[ -x file ]
文件可执行,返回真
逻辑控制
1.if
if [ -e test ];then echo exit;else echo false;fi
2.case
3.for while until select
4.&& ||
5.break continue
13. read命令
从标准输入读取数值
可以读取键盘输入值也可以通过重定向读取文件的值
# 参数
-p # 后面跟提示信息
-n # 定义输入字符长度
-a # 后面接变量,该变量为数组,会给该变量进行赋值,输入默认以空格为分隔符
用法:
read -p "please input something" yn
cat test.txt | where read line;do echo $line;done
脚本调试
-n # 不执行脚本,检查是否有语法错误
-v # 在执行脚本前,先将脚本的内容输出到屏幕上
-x # 将使用到的脚本内容显示到屏幕上
练习1
输入一个数,计算从1+2……+直到输入的数值为止
i=0
out=0
until [ $input ]
do
read -p "input int:" input
while [ $i -le $input ]
do
out=$(($i+$out))
echo $out
i=$(($i+1))
done
echo "out===$out"
done
echo "end"