#!/bin/bash
echo "Hello shell"
#!!!变量名和等号之间不能有空格
#命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
#中间不能有空格,可以使用下划线 _。
#不能使用标点符号。
name="xiaoming"
readonly name
echo "my name is ${name}!"
#获取字符串长度
echo ${#name}
#将当前目录的文件名循环出来。
#for file in $(ls ./)
for file in `ls ./`;do
echo $file
done
#$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
echo $1
#$* 与 $@ 区别:
#相同点:都是引用所有参数。
#不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
# ?? $*不带 “” 的时候得到的也是 "1" "2" "3"
for i in $* ; do
echo $i # "123"
done
for i in "$@" ; do
echo $i # "1" "2" "3"
done
#数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
#方法1
array=(a b c)
#方法2
array1[0]=e
array1[1]=f
array1[2]=g
echo ${array[2]} #a
echo ${array1[2]} #f
#获取数组长度的方法与获取字符串长度的方法相同
echo "数组元素个数为${#array[*]}"
#默认array指的是array[0],即${array} == ${array[0]},${#array} == ${#array[0]}
#要获取单个下标值就得使用 array[1], 获取全部就用${#array[*]} 或 ${#array[@]}
#原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
# " ` " 是markdown语法中代码段的标记符号,不是引号
# + 号两边一定要有空格
#或者使用$[2*3] ,不支持$[2^3]高级运算符
val=`expr 1 + 2`
val1=$[2*3]
echo $val # 3
echo $val1 # 6
#关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
#下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
#运算符 说明 举例
#-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
#-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
#-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
#-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
#-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
#-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。
a=10
b=20
if [ $a -eq $b ]
then
echo "a等于b"
else
echo "a不等于b"
fi
##printf
# "\n"换行
# 占位符:"%s":字符串 "%c":字符 "%d":整型 "%f":浮点数
# %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
# .2 指保留2位小数。
printf "%-10s %-s\n" 姓名 成绩
printf "%-10s %-.2f\n" 小明 60.50900 #60.51 会四舍五入
printf "%-10s %-.2f\n" 小红 95 #95.00 会补齐0
printf "%-10s %-.2f\n" 小花 110.5 #110.50
printf "this! \a\n"
#!/bin/bash
a=10
b=10
if test $a -eq $b
then
echo "a = b"
else
echo "a != b"
fi
num=$[2*3]
echo $num
echo "sum = $[a+b]"
c="ccc"
if test -n $c
then
echo "c长度 > 0"
fi
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
for v in 1 2 3
do
echo $v
done
array=(1 2 3)
for v in $array
do
echo 1
done
for str in xiao ming
do
echo $str
done
#!/bin/bash
funcA() {
a=`expr 1 + 2`
return $a
}
funcA
echo $?
funcB(){
b="xiaohua"
echo $b
}
funcB
echo $?
funcC
funcC(){
c="xiaoming"
return $c
}
funcC
echo $?
funcD(){
d="xiaomao"
}
echo $d
funcD
echo $d
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
#!/bin/bash
source ./s.sh
echo $url
who > out.txt
who >> out.txt
cat out.txt
wc -l out.txt
wc -l < out.txt
who > /dev/null
who > /dev/null 2>&1
cat << EOF
hello
world
EOF
cat << EOF >> out.txt # 用 > 会替换
hello
world
EOF