系统相关
首页 > 系统相关> > 《Unix/Linux系统编程》第三周学习笔记

《Unix/Linux系统编程》第三周学习笔记

作者:互联网

《Unix/Linux系统编程》第三周学习笔记

sh编程

sh脚本

#! /bin/bash
# comment line
echo hello

sh脚本于C语言程序

命令行参数

在sh脚本中,可以通过位置参数$0、$1、$2等访问命令行参数。前10个命令行参数可以作为$0~$9被访问。其他参数必须称为${10}~${n},其中n>10o可以通过稍后显示 的shift命令査看它们。通常,$0是程序名本身,$1到$n是程序的
参数,在sh中,可用内置变量$#和$*计数并显示命令行参数。
$# = 命令行参数$1到$n的数量
$* = 所有命令行参数,包括$0,此外,,sh还有与命令执行相关的以下内置变量。
$S = 执行sh的进程PID
$? = 最后一个命令执行的退出状态(如果成功,则为0,否则为非0 )
#! /bin/bash
echo \$# = $#
echo \$* = $*
echo $1 $9 $10
echo $1 $9 %{10}
shift #replace $1,$2with $2,$3
echo $1 $9 ${10}


sh变量

#! /bin/bash
echo A
echo $A
A="this is fun"
echo $A
B=A  # B和等于号必须要贴贴 b = a是不行的
echo $B
B=$A
echo $B 

sh中的引号

#! /bin/bash
A=XYZ
echo \$A
echo '$A'
echo "see $A"

sh语句

#! /bin/bash
ls
ls > outfile 
date
cp fl f2
mkdir newdir 
cat < filename

运行如下


sh命令

内置命令

#! /bin/bash
echo -n "enter yes or no:"
read ANS
echo $ANS

linux 命令

#! /bin/bash
echo This  is   a line
echo "This is    a    line"
echo -n hi #-n 不换行
echo   there

#! /bin/bash
i=123
echo $i
i=$i+1
echo $i
i=123
i=$(expr $i + 1)
echo $i

#! /bin/bash
ps -ax | grep httpd
cat file | grep word



-实用命令:除了上面的linux命令之外,sh还有使用很多其他实用程序作为命令。

命令替换

#! /bin/bash
echo $(date)
echo $(ls /home/hzx)

sh控制语句

if-else-fi 语句

if [ condition ]
  then
    statements
  else
    statements
fi
字符串比较
if [ si = s2 ]	# NOTE: white spaces needed between tokens
if [ si 1= s2 ]
if [ si \< s2 ]	# \< because < is a special char
if [ si \> s2 ] etc. # \> because > is a special char
test stringl COMP string2 OR [ stringl COMP string2 】 #比较两个字符串
文件比较
if [ -e name ]  # test whether file name exists
if [ -f name ]  # test whether name is a (REG) file
if [ -d name ]  # test whether name is a DIR 
if [ -r name ]  # test whether name is readable; similarly for -w, -xr etc.
if [ f1 -e f2 ]  # test whether fl, £2 are the SAME file
if-elif-else-fi
if [ conditionl ]; then
    commands
  elif [ condition2 ]; then
    commands
# additional elif [ conditions ]; then etc.
  else
    commands
fi

复合条件:与在C语言中一样,sh也允许在复合条件中使用&& (AND)和||(0R), 但是语法比C语言更加严格。条件必须用一对匹配的双括号[[和]]括起来。
[: test string1 COMP string2 OR [ string1 COMP string2]

sh中

0:表示TRUE
非零:表示FASLE

#! /bin/bash
read ANS
echo $ANS
if [ "$ANS" -eq "20201310" ]
    then
       echo "you have printed 20201310"
    else
       echo "you haven't printed 20201310"
       
fi

for 语句
for VARIABLE in stringl string2 .... stringn
  do
    commands
  done
#! /bin/bash
for ANS in 20201310 20201311
    do 
    	if [ "$ANS" -eq "20201310" ]; then
            echo hello20201310
        elif [ "$ANS" -eq "20201311" ]; then
            echo hello20201311
        fi
    done

while 语句
while [ condition ]
  do
    commands
  done
#! /bin/bash
i=20201310
while [ $i != 20201315 ]
    do
        echo $i
        i=$(expr $i + 1)
    done

until-do 语句
until [ $ANS = "give upn ]
  do
    echo -n "enter your answer :"
  read ANS
    done
#! /bin/bash
i=20201301
until [ $i = 20201310 ]
    do
        echo "$i is best"
        i=$(expr $i + 1)
    done

case 语句
case $variable in
  patternl) commands;; # note the double semicolons ;;
  pattern2) command;; 
  patternN) command;;
esac
#! /bin/bash
read i
echo $i
case $i in
    20201310)  echo you live in 415;;
    20201303)  echo you live in 415;;
    20201327)  echo you live in 415;;
    20201319)  echo you live in 415;;
esac

continue和break 语句

i/o重定向

>file //stdout转向文件,如果文件不存在,将会创建文件。
>>file //stdout追加到文件。
<file //将文件用作stdin;文件必须存在并具有r权限。
<<word //从"here"文件中获取输入,直到只包含“word”的行。

嵌入文档

#! /bin/bash
echo << A
A
cat << DONE
DONE

sh 函数

#! /bin/bash
TestFile()
{
    if [ "$1" -eq "20201310" ]; then
        echo "$1 is best"
    fi
}       
for i in 20201310 20201315 20201320 20201325
    do 
        TestFile $i
    done

sh 中的通配符

file*:列出当前目录中所有文件的信息。
Is *.c:列出当前目录中所有以.c结尾的文件。
[]通配符:查询某文件名中的字符
file ???:有3个字符的所有文件名。
Is*.??: 一个点号.后有2个字符的所有文件名。
[]通配符:查询文件名中一对[]中的字符。

命令分组

eval 语句(不太理解)

调试sh

问题:

标签:bin,编程,echo,命令,Unix,sh,Linux,执行,bash
来源: https://www.cnblogs.com/hzxjkl/p/16697768.html